文件的下载的功能是系统必不可少的功能,自己手写有些麻烦,这时候springMVC为我们提供一种简单的方式使用 responseentity 进行文件下载,具体代码如下:
// 根据文件id 进行文件的下载
@RequestMapping("/downloadFile/{id}")
public ResponseEntity<InputStreamResource> downFile(@PathVariable("id") String id) throws Exception{
// 根据文件 id 从数据库中查询出文件的一些基本信息
SysFileImportEntity sysFileImportEntity=sysFileImportService.selectById(id);
if(sysFileImportEntity!=null){
// 文件的原始名称
String fileName=sysFileImportEntity.getOrginFileName();
// 文件在服务器上存放的路径
String filePath=sysFileImportEntity.getFilePath();
File file = new File(filePath);
InputStream inputStream = new FileInputStream(file);
InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
HttpHeaders headers = new HttpHeaders();
if(sysFileImportEntity.getTemplateName().equals("solutionAudioUploadList")){
headers.add("Accept-Ranges", "bytes");
}
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Content-Disposition", String.format("attachment; filename=\"%s\"", URLEncoder.encode(fileName,"UTF-8")));
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return ResponseEntity
.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(inputStreamResource);
}else {
InputStream inputStream = new ByteArrayInputStream("<script language=\"javascript\">alert('文件不存在!');</script>".getBytes("GBK"));
InputStreamResource inputStreamResource = new InputStreamResource(inputStream);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_TYPE,"text/html;charset=UTF-8");
headers.add("Cache-Control", "no-cache, no-store, must-revalidate");
headers.add("Pragma", "no-cache");
headers.add("Expires", "0");
return ResponseEntity
.ok()
.headers(headers)
.contentType(MediaType.TEXT_HTML)
.body(inputStreamResource);
}
}