자바에서 파일 다운로드 기능을 구현했는데 일부 파일은 다운이 되질 않는 것이다.
원래 파일명이 R&D연구.PDF 면 파일 시스템에선 201901223123123_PDF로 저장한다.
다시 다운받을 땐 DB에 저장된 파일명이 아닌 실제 파일명으로 변경해줘야 하기 때문에
//downname을 파라미터로 받아온다. String downname = request.getParameter("downname"); //header에 파일 네임을 써준다. response.setHeader("Content-Disposition", "attachment; filename=\"" + downname + "\"");
위의 소스를 쓴다.
하지만 downname에 특수문자가 있어서 다운이 되질 않았다.
downname = URLEncoder.encode(downname, "UTF-8").replaceAll("\\+", "%20");
인터넷 익스플로어에선 위의 소스처럼 인코딩을 해주면 잘 작동하는데
일부 파일은 동작하지 않는 것이다.
왜 그런가 했더니 특수문자 때문이었다.
downname에 특수문자 '&'가 들어 있어서 그렇다.
이럴 땐 JSP 즉 자바스크립에서 호출 시 파라미터를 인코딩 해줘야한다.
function encode(url){ var strArr = url.split("downname="); var str = encodeURIComponent(strArr[1]); location.href = strArr[0]+'downname='+str; }
나같은 경우는 downname을 짤라서 배열로 나눈 다음
인코딩해서 다시 붙이는 식으로 사용했다.
R&D연구.PDF로 잘 다운받아짐.
주의할점은 encodeURI는 '&'등 일부 기호를 인코딩하지 못하기 때문에 같이 인코딩할려면
encodeURIComponent를 해줘야 한다.