java中常用的两种下载方式总结:
1)将文件放在webroot目录中,WEB-INF外,这样当请求下载时,返回页面一个相对路径或者绝对路径(即将可访问资源文件直接返回给页面),通过页面访问资源的形式,进行下载;
2)将资源的输入流写入response的输出流,再将携带资源流的response返回页面,达到下载目的
public void download(String sPath, HttpServletResponse response) {
File oFile = new File(sPath);
if (!oFile.exists()) {
return;
}
response.setContentType("application/octet-stream");
response.addHeader("Content-Disposition", "attachment;filename=" + oFile.getName());
response.addHeader("Content-Length", "" + oFile.length());
InputStream oInputStream = null;
try {
oInputStream = new FileInputStream(oFile);
ServletOutputStream sops = response.getOutputStream();
byte[] buffer = new byte[1024];
int nTempLength = 0;
while ((nTempLength = oInputStream.read(buffer, 0, 1024)) != -1) {
sops.write(buffer, 0, nTempLength);
}
} catch(IOException e) {
e.printStackTrace();
} finally {
if (oInputStream != null) {
try {
oInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}