<%
/** ================================================================
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();
}
}
}
%>