출처 : http://blog.daum.net/badog/4457979
// downloadFile.jsp
<%@ page language="java" contentType="text/html; charset=euc-kr" pageEncoding="EUC-KR" %><%@ page import!="java.io.*"%><%
request.setCharacterEncoding("euc-kr");
String filename = new String((request.getParameter("fileName")).getBytes ("8859_1"),"EUC_KR");
String filePath = "C:/test";
InputStream in= null;
OutputStream os = null;
File file= null;
File viewFile = null;
boolean skip= false;
String client= "";
try{
String fname1 = "";
String fname2 = "";
String fname = "";
fname = filename;
fname1 = new String(fname.getBytes("8859_1"),"euc-kr");
try{
file = new File(filePath, fname);
viewFile = new File(filePath, fname1);
// out.print("file : " + file);
in= new FileInputStream(file);
}catch(FileNotFoundException fe) {
skip= true;
}
fname2 = new String(fname1.getBytes("euc-kr"),"8859_1");
response.reset();
// client = request.getHeader("User-Agent");
// response.setContentType("application/x-msdownload;");
// response.setHeader("Content-Description", "JSP Generated Data");
if(!skip){
if(client.indexOf("MSIE 5.5") != -1){
response.setHeader("Content-Type", "doesn/matter; charset=euc-kr");
response.setHeader("Content-Disposition", "filename="+new String(fname.getBytes("euc-kr"),"8859_1"));
}else{
response.setHeader("Content-Type", "application/octet-stream; charset=euc-kr");
response.setHeader("Content-Disposition", "attachment; filename="+new String(fname.getBytes("euc-kr"),"8859_1"));
}
response.setHeader("Content-Transfer-Encoding", "binary;");
response.setHeader ("Content-Length", ""+file.length());
response.setHeader("Pragma", "no-cache;");
response.setHeader("Expires", "-1;");
os = response.getOutputStream();
byte b[] = new byte[10240];
int leng = 0;
while( (leng = in.read(b)) > 0 ){
os.write(b,0,leng);
}
}else{
out.println("<script>");
out.println("alert!('파일 다운로드중 애러가 발생하였습니다.')");
out.println("</script>");
return;
}
}catch(Exception e) {
System.out.println(e);
}finally{
if(os != null) try{os.close();}catch(Exception ex){System.out.println(ex);};
if(in != null) try{in.close();}catch(Exception ex){System.out.println(ex);};
}%>
<a href="downloadFile.jsp?fileName=<%=file %>">다운로드</a>
어디서 구해온 소스인데 이거 때문에 진짜 고생했다.
파일은 다운로드 되는데 getOutputStream 애러가 계속 나는 것이였다.
알고보니 이놈은 스페이스나 줄바꿈 뭐 이런게 들어가면 안되는 것이다.
<%...%><%...%> 요런식으로 다 붙여야 한다.
그리고 다운로드 취소시에 소켓 애러가 나는데 그건 무시하자. 그건 문도 안열었는데 닫으라고 하니까 나는거다.