시처럼 음악처럼
2007. 7. 9. 13:14
[잡팁]한글 파일 다운로드(IE, FF 테스트 완료) |
해결된 문제
1. 한글 문제
2. 아헿헿 류 파일명
3. %20등 인코드 되버리는 문자열 포함 파일명
4. 대화 상자에서 한글 깨지는 문제
테스트 방법
C:/PDS에 첨부한 아헿헿1.ppt와 %B0%F8%C7%F6%C1%D61_eparinara.jpg를 추가한다.
http://localhost:8082/WebTest/FileDownload.jsp?FILENAME=아헿헿1.ppt
http://localhost:8082/WebTest/FileDownload.jsp?FILENAME=%B0%F8%C7%F6%C1%D61_eparinara.jpg
<%@ page import="java.util.*,java.io.*" contentType="text/html; charset=MS949"%><% String queryString = request.getQueryString(); String dialogFilename = request.getParameter("FILENAME"); String fname = new String(dialogFilename.getBytes("8859_1"), "MS949"); if(queryString.contains("%")) { fname = request.getQueryString(); String startWord = "FILENAME="; int start = fname.indexOf(startWord) + startWord.length(); int end = fname.indexOf("&"); if(end !=-1) fname = fname.substring(start, end); else fname = fname.substring(start); } String fpath = "현재 서버의 실제 디렉토리 경로 - 예) C:/PDS"; File file = new File(fpath+fname); if(!file.exists()) { out.println("<script>"); out.println("alert('요청한 파일을 찾을 수 없습니다.');"); out.println("history.back();"); out.println("</script>"); return; }
BufferedInputStream input = null; BufferedOutputStream output = null; response.reset(); String strClient = request.getHeader("User-Agent"); if (strClient.indexOf("MSIE 5.5") != -1) { response.setHeader("Content-Disposition", "filename=" + dialogFilename + ";"); } else { response.setHeader("Content-Disposition", "attachment; filename=" + dialogFilename + ";"); response.setHeader("Content-Type", "application/octet-stream; charset=MS949"); } response.setHeader("Content-Length", ""+ file.length()); response.setHeader("Content-Transfer-Encoding", "binary;"); response.setHeader("Pragma", "no-cache;"); response.setHeader("Expires", "-1;");
try { input = new BufferedInputStream( new FileInputStream(file) ); byte buffer[] = new byte[1024]; int len = 0; out.clear(); out.flush(); output = new BufferedOutputStream(response.getOutputStream()); while((len = input.read(buffer)) > 0 ){ output.write(buffer,0,len); } } catch(Exception e) { e.printStackTrace(); } finally{ response.flushBuffer(); if(input !=null)try{input.close();}catch(Exception e){} if(output !=null)try{output.close();}catch(Exception e){} } %> |