반응형
자바를 이용해 파일을 다운받을때에 한글이름을 사용하면 다운이 깨지는 현상이 발생한다.
크롬으로 테스트 했을때에는 한글이 깨지는 현상만 발생했지만 브라우저 별로 발생하는 현상이 다르다
이참에 브라우저별 파일 다운로드 시 인코딩 방법을 알아보자
원인
크롬(Chrome) : 파일 다운로드는 되지만 파일명의 특수문자 깨짐
익스플로러(Internet Explorer) : 크롬의 문제 + 한글 파일명을 가진 파일은 다운로드 자체가 안됨
파이어폭스(Firefox) : 파일에 공백이 있으면 그 공백을 기준으로 뒤쪽 이름은 다 짤려버림. 예를 들어 “테스트 파일.jpg”를 다운로드 해보면 “테스트”라는 이름으로 확장자도 안 붙은 파일이 다운로드 됨
해결방법
공통적으로 한글이름은 인코딩하여 넣어주면 된다. 익스플로러나 파이어폭스의 경우 공백에대한 처리를 넣어줘야한다.
@GetMapping("/api/excel")
public void getExcel(final HttpServletRequest request, final HttpServletResponse response){
String userAgent = request.getHeader("User-Agent");
String orgFileName = "한글이름";
String downloadFileName = "";
//엑셀 생성을 위한 과정
Workbook workbook = new Workbook();
workbook = 엑셀 생성 함수 호출(추후 포스팅 하도록 하겠다)
if(userAgent.indexOf("MSIE") > -1 || userAgent.indexOf("Trident") > -1) {
downloadFileName = URLEncoder.encode(orgFileName, "UTF-8").replaceAll("\\+", "%20");
} else{
downloadFileName = URLEncoder.encode(orgFileName, "UTF-8")
}
response.setContType("ms-vnd/excel");
response.setHeader("Content-Disposition", "attachment; filename=" + downloadFileName + ".xlsx");
OutputStream outputStream = response.getOutputStream();
workbook.write(outputStream);
}
공통적으로 URLEncoder를 이용해 인코딩을 해주고 익스플로러와 파이어폭스일때에는 공백 관련 처리를 추가로 해준다.
위에 코드는 포이 라이브러리를 이용해 엑셀파일 생성 후 파일을 내려주는 코드라 일반 파일 다운로드와는 형식이 조금 다르니 인코딩 하는 부분만 참고 하도록 하자
포이 라이브러리를 사용하는 방법음 추구 포스팅 하도록 하겠다.
반응형
'Java' 카테고리의 다른 글
[JAVA] POI사용 MVC ExcelUpload 방법 (0) | 2023.04.21 |
---|---|
Spring boot maven project 만들기 (0) | 2023.02.14 |
[JAVA] Spring Annotation @MapperScan이란? (0) | 2022.08.17 |
[JAVA]Spring Boot 압축 파일 다운받기(Spring boot zip file download) (0) | 2022.05.09 |
[JAVA] Primitive type(기본 타입) VS Reference type(참조 타입) (0) | 2022.04.11 |