05.JSP2009. 2. 18. 17:35
반응형

출처 : 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 애러가 계속 나는 것이였다.

알고보니 이놈은 스페이스나 줄바꿈 뭐 이런게 들어가면 안되는 것이다.

<%...%><%...%> 요런식으로 다 붙여야 한다.

그리고 다운로드 취소시에 소켓 애러가 나는데 그건 무시하자. 그건 문도 안열었는데 닫으라고 하니까 나는거다.

Posted by 1010