【功能描述】
提供一个接口,下载服务器指定路径下的文件
【修复提示解决办法】
response设定文件大小
response.setHeader("content-Length",String.valueOf(file.length()));
【代码】
【controller】
@GetMapping(value = "file/download")
public void downloadFile(@RequestParam("path")String path,HttpServletResponse response){
boolean result = fileService.downloadFile(path,response);
}
【service】
public boolean downloadFile(String path, HttpServletResponse response) throws Exception;
【serviceImpl】
@Override
public boolean downloadFile(String path, HttpServletResponse response) throws Exception {
File file = new File(path);
if (!file.exists()) {return false;}
// 读到流中
InputStream inputStream = Files.newInputStream(Paths.get(path));// 文件的存放路径
response.setHeader("content-type", "application/force-download");
response.setHeader("content-Length",String.valueOf(file.length()));//解决文件提示损坏
String filename = file.getName();
//纯下载方式 文件名应该编码成UTF-8
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(filename, "UTF-8"));
ServletOutputStream outputStream = response.getOutputStream();
byte[] b = new byte[1024];
int len;
//从输入流中读取一定数量的字节,并将其存储在缓冲区字节数组中,读到末尾返回-1
while ((len = inputStream.read(b)) > 0) {
outputStream.write(b, 0, len);
}
inputStream.close();
outputStream.close();
return true;
}