controller
@ApiOperation(value = "下载文件", notes = "下载文件", httpMethod = "GET", response = WebResult.class)
@RequestMapping(value = "/download", method = RequestMethod.GET)
public void downloadFile(@RequestParam(name = "id") String id,
@RequestParam(name = "fileExt", defaultValue = "", required = false) String fileExt,
@RequestParam(name = "fileName", defaultValue = "", required = false) String fileName,
HttpServletRequest request, HttpServletResponse response) throws Exception {
String fileId = fileInfoService.getFileIdByMainId(id, fileExt);
GridFSFile gfsfile = mongoDbFileService.getFSFile(fileId);
String realFileName = gfsfile.getFilename().replace(",", "");
if (StrUtil.isEmpty2(fileName)) {
fileName = realFileName;
} else {
fileName = fileName.concat(".").concat(FileUtil.getFileExt(realFileName));
}
//处理中文文件名乱码
if (request.getHeader("User-Agent").toUpperCase().contains("MSIE") ||
request.getHeader("User-Agent").toUpperCase().contains("TRIDENT")
|| request.getHeader("User-Agent").toUpperCase().contains("EDGE")) {
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
} else {
//非IE浏览器的处理:
fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1");
}
// 通知浏览器进行文件下载
//response.setContentType(gfsfile.getContentType());
response.setHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");
//gfsfile.writeTo(response.getOutputStream());
GridFsResource gridFsResource = mongoDbFileService.convertGridFSFile2Resource(gfsfile);
InputStream inputStream = gridFsResource.getInputStream();
IOUtils.copy(inputStream, response.getOutputStream());
}
fegin
@GetMapping(value = "/download")
ResponseEntity<byte[]> downloadFile(@RequestParam(name = "id") String id,
@RequestParam(name = "fileExt", defaultValue = "", required = false) String fileExt,
@RequestParam(name = "fileName", defaultValue = "", required = false) String fileName);
调用方
@ApiOperation("附件下载")
@GetMapping("/downloadAnnex")
public ResponseEntity<byte[]> download(@NotNull(message = "文件ID不能为空") String fileId, @RequestParam(required = false,defaultValue = "") String key) {
ResponseEntity<byte[]> responseEntity = fileSystemService.downloadFile(fileId, "", "");
return responseEntity;
}