관리 메뉴

드럼치는 프로그래머

[Spring] 첨부파일 다운로드 시 공백이 '+' 가 되는 현상 해결 본문

★─Programing/☆─WebProgram

[Spring] 첨부파일 다운로드 시 공백이 '+' 가 되는 현상 해결

드럼치는한동이 2016. 7. 4. 11:00
현재 개발하고 있는 시스템에서 첨부파일을 다운로드할 경우 공백이 '+' 로 바뀌어서 저장이 됩니다.

예를들어 "불친절한 자수씨의 블로그.pdf" 라는 파일이라면 "불친절한+자수씨의+블로그.pdf" 라는 파일로 저장이 됩니다.

원인은 한글 파일명을 지원하기 위해 URLEncoder 를 사용하는데, 이것이 공백을 '+' 로 만드는 범인이였습니다.

기존 방식은 아래와 같았을 것 입니다.

 

1 String fileName = "불친절한 자수씨의 블로그.pdf";
2 fileName = URLEncoder.encode(fileName, "UTF-8");
3 response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ";");

개선 방법은 URLEncoding 후 '+' 로 변경된 공백을 '%20' 으로 다시 변경합니다.

 

1 String fileName = "불친절한 자수씨의 블로그.pdf";
2 fileName = URLEncoder.encode(fileName, "UTF-8");
3 fileName = fileName.replaceAll("\\+", "%20");
4 response.setHeader("Content-Disposition", "attachment;filename=" + fileName + ";");


'+' 는 정규식의 수량을 나타내는 것이기 때문에 역슬래쉬가 앞에 붙어야 합니다.

원래 있던 '+' 가 걱정되시는 분들은 걱정할 필요가 없습니다.
URLEncoder.encode() 메소드에 의해 '%2B' 로 변환이 됩니다.

어떻게 생각해보면 쉬운 것이였는데 신경을 못 쓰다보니 불편함을 안고 살았던 것 같습니다.


 

[출처] http://vicki.tistory.com/884

Comments