● MIME 타입은 다운로드 할 수 있는 'APPLICATION_OCTET_STREAM_VALUE'으로 지정
@GetMapping(value="/download", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)
● 'Content-Disposition'로 다운로드 시 저장되는 이름 설정
● 파일 이름에 대한 문자열 처리는 파일 이름이 한글인 경우 저장할 때 깨지는 문제를 막기 위함
try {
headers.add("Content-Disposition", "attachment; filename=" + new String(resourceName.getBytes("UTF-8"), "ISO-8859-1"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
● Chrome과는 다르게 IE/Edge 브라우저에서의 파일 다운로드 시 한글 깨짐 문제
● HTTP 헤더 메세지에 'User-Agent' 값을 이용(디바이스의 정보를 알 수 있음)
- 브라우저의 종류, 모바일인지 데스크톱인지 혹은 브라우저 프로그램의 종류를 구분 가능
// 수정 전
public ResponseEntity<Resource> downloadFile(String fileName) {}
// 수정 후
public ResponseEntity<Resource> downloadFile(@RequestHeader("User-Agent")String userAgent, String fileName) {}
● IE, Edge, Chrome 3가지 경우에 따라 인코딩 방식을 다르게 해 다운로드 시에 한글이 깨지지 않게 처리
- useragnet 정보 참고 : ohgyun.com/292
// IE 브라우저의 경우(IE 브라우저의 엔진 이름 = "Trident")
if(userAgent.contains("Trident")) {
downloadName = URLEncoder.encode(resourceOriginalName, "UTF-8").replaceAll("\\+", " ");
// Edge 브라우저의 경우
} else if(userAgent.contains("Edge")) {
downloadName = URLEncoder.encode(resourceOriginalName, "UTF-8");
// Chrome 브라우저의 경우
} else {
downloadName = new String(resourceName.getBytes("UTF-8"), "ISO-8859-1");
}
'프로그래밍 > Spring' 카테고리의 다른 글
[Spring-security] JDBC를 이용한 쿼리 호출시 log에창 안뜨는 문제 (0) | 2021.05.21 |
---|---|
[Spring Security]Spring project에 Spring Security 적용 (0) | 2021.05.20 |
[jQuery] 페이징 처리에서의 event.preventDefault() (0) | 2021.01.04 |
[Javascript] Json 형태로 받아온 날짜 처리하기 (0) | 2020.12.29 |
[jQuery] id, name, class로 접근 방법 (0) | 2020.12.29 |