본문 바로가기
IT/JAVA

file download 시 stream

by 최고영회 2013. 12. 21.
728x90
반응형
SMALL

package com.bbs.common.fileupload;

import javax.servlet.*;
import javax.servlet.http.*;

import org.apache.struts2.ServletActionContext;

import com.bbs.common.core.req.ReqPro;
import com.bbs.common.core.sqlmap.DataBox;
import com.bbs.common.util.DateUtil;
import com.bbs.common.util.StringUtil;
import com.bbs.common.util.SystemGlobals;

import java.io.*;

/**
 * FileDownloadUtil.java
 * @Description : 파일 다운로드  클래스
 * @author : 김영회 
 * @modify : 
 * @since 2008. 06. 24
 * @version 1.0
 */
public class FileDownloadUtil extends HttpServlet {

 /**
  * 파일 다운로드 
  * post 방식으로 넘어옴
  * @return
  * @throws Exception
  */
 public void fileDownload()throws ServletException, IOException
 {
  try{ 
   HttpServletRequest request = ServletActionContext.getRequest();
   ReqPro reqPro = new ReqPro();
   DataBox box = reqPro.getBox(request);
   
   HttpServletResponse response = ServletActionContext.getResponse();
   
   // 박스에서 파라미터 받아오기
   String korFileNm      = box.getString("s_filename");   // 디비에 저장되는 한글 파일 이름
   String fileName      = box.getString("s_realname");   // 업로드된 숫자 파일

   String basePath      = box.getString("basePath");   // 업무별 저장위치 구분자 
   String makeDate      = box.getString("s_snMakedate");  // 저장 날짜 (yyyyMM)
   if(makeDate.length()>6){
    makeDate = StringUtil.removeChar(makeDate, "/");
    makeDate = StringUtil.removeChar(makeDate, ".");
    makeDate = makeDate.substring(0,6);
   }else{
    makeDate = DateUtil.getNowDate("yyyyMM");
   }

   System.out.println("업로드된 숫자 파일이름=>"+fileName);
   System.out.println("디비에 저장되어있는 한글 파일이름=>"+korFileNm);
   
   
   InputStream in      = null;
   OutputStream os      = null;
   File file         = null;
   boolean skip       = false;
   String client       = "";
   
   try {
    
    try {
     
     //file   = new File(filePath+makeDate, fileName);
     file   = new File(StringUtil.getSavePath(basePath)+makeDate,new String(fileName.getBytes("KSC5601"),"8859_1"));
     in    = new FileInputStream(file);
     
    } catch (FileNotFoundException fe) {
     
     skip   = true;   // 파일을 정상적으로 생성 못하면 true
     
    }
   
    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(korFileNm.getBytes("euc-kr"), "8859_1"));
     } 
     else 
     {
      response.setHeader("Content-Type",
        "application/octet-stream; charset=euc-kr");
      response.setHeader("Content-Disposition",
        "attachment; filename="
          + new String(korFileNm.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[4096];
     int leng    = 0;
     
     while ((leng = in.read(b)) > 0) 
     {
      os.write(b, 0, leng);
     }
    } 
    else 
    {
     System.out.print(" <SCRIPT>alert(\"File not exists!!!.\");</SCRIPT> ");
     return;
    }
    
   } catch (Exception e) {
        System.err.println(e.toString());
   } finally {
    if (in != null)
     in.close();
    if (os != null)
     os.close();
   }

  }catch(Exception e){
        System.err.println(e.toString());
  }

 }  

728x90
반응형
LIST

'IT > JAVA' 카테고리의 다른 글

NIO 이용 파일 카피  (0) 2013.12.21
Java 로 mail 보내기  (0) 2013.12.21
자바 서버 소켓 멀티 쓰레드  (0) 2013.12.21
EJB  (0) 2013.12.21
한글이름 file 저장 (unix 에서)  (0) 2013.12.21