Web/JSP_SERVLET

파일 다운로드 패키지화. 다운 ( 삭제도 보기 )

벨포트조던 2016. 3. 10.
반응형

--------------------------- 파일 불러올 페이지 상단 선언


String sql ="select attachno, saveFileNm, orifilenm from g_attachedFile where letterNo=?";

pstmt=conn.prepareStatement(sql);

pstmt.setInt(1,letterNo);

rs = pstmt.executeQuery();

// DB 불러오는 예 .


StringBuffer fileInfo = new StringBuffer();

String fileTag = "<div><a href='./fileDown/fileDown.jsp?filename=%s'>%s</a></div>";

while(rs.next()){

fileInfo.append(String.format(fileTag, java.net.URLEncoder.encode(rs.getString("saveFileNm"),"EUC-KR"),rs.getString("orifilenm")));

}

rs.close();

pstmt.close();




<script type ="text/javascript">

$(function(){

var fileInfo = "<%=fileInfo != null ? fileInfo.toString() : "" %>";

if(fileInfo != ""){

$(".file").append(fileInfo);

}

document.all("menuTitle").innerHTML="<%=bbsGubunName%>";

});

<script>


<td class="file"></td>

//  위에 선언한 스트링버퍼에 있는 문자열값을 자바스크립트로 배치





-------------------------------------- 파일 다운로드 , fileDown.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@ page import="java.io.*"%>

<%@ page import="java.text.*" %>

<%@ page import="java.lang.*" %>

<%@ page import="java.util.*" %>

<%@ page import="java.net.*" %>

<%

request.setCharacterEncoding("UTF-8");


//

String saveFolder = request.getRealPath("/") + "upload/partnerfile";

// 나중에 지워야함. 

    // 파일 업로드된 경로

    String savePath = saveFolder;

 

    // 서버에 실제 저장된 파일명

    String filename = request.getParameter("filename") ;

if(filename==null) filename="";

    // 실제 내보낼 파일명

    String orgfilename = request.getParameter("filename") ;

    if(orgfilename==null) orgfilename="";

    orgfilename = new String(orgfilename.getBytes("8859_1"),"KSC5601"); 

    

    InputStream in = null;

    OutputStream os = null;

    File file = null;

    boolean skip = false;

    String client = "";

 

    try{

    out.clear();


        // 파일을 읽어 스트림에 담기

        try{

        try{

           file = new File(savePath, orgfilename);

        } catch (Exception e11){

        }

            in = new FileInputStream(file);


        }catch(FileNotFoundException fe){

            skip = true;

        } catch (Exception e1){

        }

        client = request.getHeader("User-Agent");

        // 파일 다운로드 헤더 지정

        response.reset() ;

        response.setContentType("application/octet-stream");

        response.setHeader("Content-Description", "JSP Generated Data");

        if(!skip){

 

        orgfilename = new String(orgfilename.getBytes("euc-kr"),"8859_1");

            // IE

            if(client.indexOf("MSIE") != -1){

                response.setHeader ("Content-Disposition", "attachment; filename=" + orgfilename);

 

            }else{

                // 한글 파일명 처리

 

                response.setHeader("Content-Disposition", "attachment; filename=\"" + orgfilename + "\"");

                response.setHeader("Content-Type", "application/octet-stream; charset=utf-8");

            }  

             

            response.setHeader ("Content-Length", ""+file.length() );

            out.clear();

            out = pageContext.pushBody();

            os = response.getOutputStream();

            byte b[] = new byte[(int)file.length()];

            int leng = 0;

            response.flushBuffer();

            while( (leng = in.read(b)) > 0 ){

                os.write(b,0,leng);

            }

 

        }else{

            response.setContentType("text/html;charset=UTF-8");

            out.println("<script language='javascript'>alert('파일을 찾을 수 없습니다"+orgfilename+"');history.back();</script>");

        }

         

        in.close();

        os.flush();

        os.close();

    }catch(Exception e){

      e.printStackTrace();

    }

%>

<%@include file ="../../include/dbClose.jsp" %> 





--------------------------------------------- 내가 조정한것 


<%@ page language="java" contentType="text/html; charset=UTF-8"%>

<%@ page import="java.io.*"%>

<%@ page import="java.text.*" %>

<%@ page import="java.lang.*" %>

<%@ page import="java.util.*" %>

<%@ page import="java.net.*" %>

<%


request.setCharacterEncoding("UTF-8");


//

String saveFolder = request.getSession().getServletContext().getRealPath("/")+ "upload/partnerfile";

System.out.println(saveFolder);

// 나중에 지워야함. 

    // 파일 업로드된 경로

    String savePath = saveFolder;

 

    // 서버에 실제 저장된 파일명

    String filename = request.getParameter("filename") ;

if(filename==null) filename="";

filename = new String(filename.getBytes("ISO-8859-1"), "UTF-8"); 

    System.out.println(filename);

    // 실제 내보낼 파일명

    String orgfilename = request.getParameter("orifilename") ;

    if(orgfilename==null) orgfilename="";

    System.out.println(new String(orgfilename.getBytes("ISO-8859-1"), "UTF-8")+"  sss1");

    

    // 이부분의 차이가 중요하다. 주석풀고 안풀고 해보자

    //orgfilename = new String(orgfilename.getBytes("ISO-8859-1"), "UTF-8");

    

    

    InputStream in = null;

    OutputStream os = null;

    File file = null;

    boolean skip = false;

    String client = "";

 

    try{

    out.clear();


        // 파일을 읽어 스트림에 담기

        try{

        try{

           file = new File(savePath, filename);

        } catch (Exception e11){

        }

            in = new FileInputStream(file);


        }catch(FileNotFoundException fe){

            skip = true;

        } catch (Exception e1){

        }

        client = request.getHeader("User-Agent");

        // 파일 다운로드 헤더 지정

        response.reset() ;

        response.setContentType("application/octet-stream");

        response.setHeader("Content-Description", "JSP Generated Data");

        if(!skip){

 

        if(client.indexOf("MSIE") != -1){

           

                response.setHeader ("Content-Disposition", "attachment; filename="+ orgfilename + ";" );

                System.out.println(orgfilename+"  sss"); 

            }else{

                // 한글 파일명 처리 실서버!! 에서는 아래줄 주석처리 .. 왜그런지는 모르겠음.

                System.out.println(orgfilename+"  sss2");

                response.setHeader("Content-Disposition", "attachment; filename=\"" + orgfilename + "\"");

                response.setHeader("Content-Type", "application/octet-stream; charset=utf-8");

            } 

             

            response.setHeader ("Content-Length", ""+file.length() );

            out.clear();

            out = pageContext.pushBody();

            os = response.getOutputStream();

            byte b[] = new byte[(int)file.length()];

            int leng = 0;

            response.flushBuffer();

            while( (leng = in.read(b)) > 0 ){

                os.write(b,0,leng);

            }

 

        }else{

            response.setContentType("text/html;charset=UTF-8");

            out.println("<script language='javascript'>alert('파일을 찾을 수 없습니다"+filename+"');history.back();</script>");

        }

         

        in.close();

        os.flush();

        os.close();

    }catch(Exception e){

      e.printStackTrace();

    }

%>



반응형

댓글