onclick="window.open('${file.url}')
${file.url}为数据库存储的本地文件地址,点击后会自动下载;
该方法存在一个小问题,当文件上传的时候采用md5后,下载的时候文件名和上传的文件名会不一致。
如图,显示文件名和下载文件名不一致。下面重新换个方法已解决该bug
2. path:数据存储的文件地址
filename:数据存储的文件名
@RequestMapping("download.do")
public HttpServletResponse download(String path,String filename, HttpServletRequest request,HttpServletResponse response) {
try {
//文件全地址
String fileurl = request.getSession().getServletContext().getRealPath(path);
File file = new File(fileurl);
// 以流的形式下载文件。
InputStream fis = new BufferedInputStream(new FileInputStream(fileurl));
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();
// 清空response
response.reset();
// 获得请求头中的User-Agent
String agent = request.getHeader("User-Agent");
// 根据不同浏览器进行不同的编码
String filenameEncoder = "";
if (agent.contains("MSIE")) {
// IE浏览器
filenameEncoder = URLEncoder.encode(filename, "UTF-8");
} else {
// 其它浏览器
filenameEncoder = new String(filename.getBytes("UTF-8"), "ISO8859-1");
}
response.addHeader("Content-Disposition","attachment;filename=" + filenameEncoder);
response.addHeader("Content-Length", "" + file.length());
response.setContentType("application/octet-stream");
toClient = new BufferedOutputStream(response.getOutputStream());
toClient.write(buffer);
toClient.flush();
toClient.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return response;
}