/**
*
* @param request 没啥用
* @param response response
* @param filePath 文件路径 D:\var\ 或者 /var/log/
* @param name 本机或者linux 的文件名
* @param fileName 需要下载到前端的文件名
*/
private void downLoadFile(HttpServletRequest request, HttpServletResponse response, String filePath,String name,String fileName) {
response.setCharacterEncoding("UTF-8");
response.setContentType("application/x-msdownload");
try {
String fileNameURL = URLEncoder.encode(fileName, "UTF-8");
response.setHeader("Content-disposition", "attachment;filename="+fileNameURL+";"+"filename*=utf-8''"+fileNameURL);
//获取文件路径
//获取项目在服务器上的真实路径
//String realPath = request.getSession().getServletContext().getRealPath("/");
//如果数据库中存的路径是文件在项目下的那个目录的话,就需要和上面的路径进行拼接(‘File.separator’是区分服务器的路径分隔符)
//fileUrl = realPath + File.separator + fileUrl + File.separator + fileName;
//如果数据库中存的路径是文件在服务器上的真实路径的话,可以直接使用
File file = new File(filePath+name);
if (!file.exists()) {
response.sendError(404, "File not found!");
return;
}
long fileLength = file.length();
response.setHeader("Content-Length", String.valueOf(fileLength));
BufferedInputStream bis = new BufferedInputStream(Files.newInputStream(file.toPath()));
BufferedOutputStream bos = new BufferedOutputStream(response.getOutputStream());
byte[] buff = new byte[2048];
int bytesRead;
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
bis.close();
bos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
07-04
446