使用IO流对文件进行传输:
@RequestMapping(value = "/download")
@ResponseBody
public void download3(HttpServletResponse response) throws IOException {
//获取本地文件
File file = new File(PathUtil.DOWNLOAD + "Test.zip");
download(response, file);
}
private void download(HttpServletResponse response,File file){
ServletOutputStream out = null;
FileInputStream ips = null;
try {
String fileName=file.getName();
if(!file.exists()) {
//如果文件不存在就结束方法
return;
}
ips = new FileInputStream(file);
response.setContentType("multipart/form-data");
//为文件设置下载后的文件名
response.addHeader("Content-Disposition", "attachment; filename=\"" + new String(fileName.getBytes("UTF-8"),"ISO8859-1") + "\"");
out = response.getOutputStream();
//读写取文件流
int len = 0;
byte[] buffer = new byte[1024 * 10];
while ((len = ips.read(buffer)) != -1){
out.write(buffer,0,len);
}
out.flush();
}catch (Exception e){
e.printStackTrace();
}finally {
try {
out.close();
ips.close();
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
前台代码,我用的H5直接用点击事件访问后端的接口:
$('#download1').click(function () {
window.open("/download");
});
(勿喷,主要是用于记录。)