2013년 3월 20일 수요일

Download Page - JSP



<%
/**   ================================================================
      Mobicator
      ----------------------------------------------------------------
      @description {file} Parameter 지정한 Id 해당하는 file Download
                        * CAUTION: JSP File File Download하는 File이므로
                         임의로  '% >' '< %'사이를 띄우거나 CR/LF 줘서는 안된다.
      @param
            file Download File Id
      @include
            N/A
      @usage
            /download.jsp?file={file_id}
      @author pluto
      @date 2008. 02. 20
      ================================================================
*/
%><%@ page language="java" contentType="application/unknown; charset=UTF-8" pageEncoding="UTF-8"
%><%-- All of Import here
--%><%@page import="java.io.File"
%><%@page import="java.io.InputStream"
%><%@page import="java.io.OutputStream"
%><%@page import="java.io.FileInputStream"
%><%@page import="java.io.BufferedOutputStream"
%><%@page import="java.io.BufferedInputStream"
%><%@page import="java.io.UnsupportedEncodingException"
%><%!
      private int DEFAULT_BUFFER_SIZE                 = 2048;

      private String HEAD_CONTENT_TYPE                = "Content-Type";
      private String HEAD_CONTENT_DISPOSITION         = "Content-Disposition";
      private String HEAD_CONTENT_TRANSFER_ENCODE     = "Content-Transfer-Encoding";
      private String HEAD_PRAGMA                            = "Pragma";
      private String HEAD_EXPIRES                           = "Expires";
      private String HEAD_CONTENT_LENGTH              = "Content-Length";

      private String CONTENT_TYPE_MATTER              = "doesn/matter;";
      private String CONTENT_TYPE_OCTET               = "application/octet-stream;";
      private String CONTENT_TRANSFER_ENCODE          = "binary;";
      private String PRAGMA                                 = "no-cache;";
      private String EXPIRES                                = "-1";

      private String USER_AGENT                             = "USER-AGENT";
      private String ENCODING                               = "UTF-8";
      private String CHAR_SET                               = "charset=" + ENCODING + ";";
      private String FILE_NAME                              = "filename=";
      private String ATTACHMENT                             = "attachment;";
      private String LOCAL_PATH                             = "/localPath/";

      private String MSIE_4                                 = "MSIE 4";
      private String MSIE_5_5                               = "MSIE 5.5";
      private String FIRE_FOX                               = "Firefox";

      public String getFileName( String fileName, String ua ) throws UnsupportedEncodingException {
            if( ua.indexOf( FIRE_FOX ) >= 0 ) {
                  return fileName;
            } else {
                 return java.net.URLEncoder.encode( fileName, "UTF-8" ).replaceAll( "\\+", "%20" );
            }
      }
%><%
      InputStream                   inStream = null;
      OutputStream                  outStream = null;
      byte[]                              buffer = null;

      String                              docBase = getServletContext().getRealPath( "/" );
      String                              ua = request.getHeader( USER_AGENT );
      String                              id = request.getParameter( "file" );
      String                              url = request.getRequestURL().toString();
      File                          downloadFile = new File( LOCAL_PATH + id );
      String                              fileName = getFileName( downloadFile.getName(), ua );

      if( ua.indexOf( MSIE_4 ) >= 0 || ua.indexOf( MSIE_5_5 ) >= 0 ) {
            response.setHeader( HEAD_CONTENT_TYPE, CONTENT_TYPE_MATTER + CHAR_SET );
            response.setHeader( HEAD_CONTENT_DISPOSITION, FILE_NAME + fileName + ";" );
      } else {
            response.setHeader( HEAD_CONTENT_TYPE, CONTENT_TYPE_OCTET + CHAR_SET );
            response.setHeader( HEAD_CONTENT_DISPOSITION, ATTACHMENT + FILE_NAME + fileName + ";" );
      }
      response.setHeader( HEAD_CONTENT_TRANSFER_ENCODE, CONTENT_TRANSFER_ENCODE );
      response.setHeader( HEAD_PRAGMA, PRAGMA );
      response.setHeader( HEAD_EXPIRES, EXPIRES );
      response.setHeader( HEAD_CONTENT_LENGTH, String.valueOf( downloadFile.length() ) );

      if( downloadFile.isFile() ) {
            try {
                  inStream = new BufferedInputStream( new FileInputStream( downloadFile ) );
                  outStream = new BufferedOutputStream( response.getOutputStream() );
                  buffer = new byte[ DEFAULT_BUFFER_SIZE ];
                  int                           bufferSize = 0;
                  while( (bufferSize = inStream.read( buffer )) != -1 ) {
                        outStream.write( buffer, 0, bufferSize );
                        outStream.flush();
                  }
            } catch( Exception e ) {
                  e.printStackTrace();
            } finally {
                  if( inStream != null ) {
                        inStream.close();
                  }
            }
      }
%>

댓글 없음: