서버에서 프론트로 파일을 전송할 때 한글로 파일명을 보내면 깨지는 경우가 다반사입니다.
따라서 아래 로직과 같이 User-Agent header 값을 가져와서 브라우저 별로 인코딩을 해 줘야 한글이 깨지지 않고 정상 출력이 됩니다.
String fileName = "한글파일명";
String name = "출력될파명이름";
// 브라우저 별 한글 인코딩
String header = request.getHeader("User-Agent");
if (header.contains("Edge")){
name = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-Disposition", "attachment;filename=\"" + name + "\".xlsx;");
} else if (header.contains("MSIE") || header.contains("Trident")) { // IE 11버전부터 Trident로 변경되었기때문에 추가해준다.
name = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
response.setHeader("Content-Disposition", "attachment;filename=" + name + ".xlsx;");
} else if (header.contains("Chrome")) {
name = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\"" + name + "\".xlsx");
} else if (header.contains("Opera")) {
name = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\"" + name + "\".xlsx");
} else if (header.contains("Firefox")) {
name = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=" + name + ".xlsx");
}
}
728x90
반응형
'Back-end > JAVA & Spring' 카테고리의 다른 글
[Java]두 날짜 사이의 개월 수 구하기 (0) | 2022.04.20 |
---|---|
[Java] 파일 다운로드 - 2가지 방식 (0) | 2022.04.19 |
[JAVA] 간단한 폴더 존재여부 확인 (0) | 2022.04.18 |
[JAVA]파일을 멀티파트로 변환 (0) | 2022.04.18 |
[java] 임시 비밀번호 생성 Random / SecureRandom /RandomStringUtils) (0) | 2022.03.03 |
댓글