jquery로 파일다운로드 요청하기 . framework 사용시 요청url을 변경하면 된다.
$.fileDownload("/common/fileDownload.jsp", {
httpMethod: 'POST',
dataType:"json", // data type of response
contentType:"application/json",
data: {"fileNm":fileNm},
successCallback: function(url) {
}
})
fileDownload.jsp
<%@ page contentType="text/xml; charset=utf-8" language="java" errorPage="" %>
<%@page import="java.util.*"%>
<%@page import="java.io.OutputStream" %>
<%@page import="java.io.File" %>
<%@page import="java.io.FileInputStream" %>
<%@page import="java.io.IOException" %>
<%@page import="java.io.PrintWriter" %>
<%@page import="java.net.URLEncoder" %>
<%@page import="net.sf.json.JSONObject"%>
<%@page import="com.comUtil.Constants"%>
<%@page import="org.apache.commons.lang.StringUtils" %>
<%
String pathname = Constants.FILE_UPLOAD_PATH;
String filename[] = request.getParameterValues("fileNm");
if(filename.length == 1){
File uFile = new File(pathname,filename[0]);
int fSize = (int)uFile.length();
if (fSize > 0) {
String mimetype = "application/x-msdownload";
response.setContentType(mimetype);
String header = request.getHeader("User-Agent");
String browser ="";
if (header.indexOf("MSIE") > -1 || header.indexOf("Trident") > -1) {
browser= "MSIE";
} else if (header.indexOf("Chrome") > -1) {
browser= "Chrome";
}
String dispositionPrefix = "attachment; filename=";
String encodedFilename = null;
if (browser.equals("MSIE")) {
encodedFilename = URLEncoder.encode(filename[0], "UTF-8").replaceAll("\\+", "%20");
}else if (browser.equals("Chrome")) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < filename[0].length(); i++) {
char c = filename[0].charAt(i);
if (c > '~') {
sb.append(URLEncoder.encode("" + c, "UTF-8"));
} else {
sb.append(c);
}
}
encodedFilename = sb.toString();
}
response.setHeader("Content-Disposition", dispositionPrefix + encodedFilename);
response.setContentLength(fSize);
OutputStream outputstream = null;
FileInputStream inputstream = null;
try {
out.clear();
pageContext.pushBody();
outputstream = response.getOutputStream();
inputstream = new FileInputStream(uFile);
byte[] buffer = new byte[1024];
int length = 0;
while((length = inputstream.read(buffer)) > 0) {
outputstream.write(buffer,0,length);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (inputstream != null){
inputstream.close();
}
outputstream.flush();
outputstream.close();
} catch (Exception e2) {}
}
}
}
%>