@RequestMapping("/download")
public ResponseEntity<byte[]> export(@RequestParam("id") Long id, HttpServletRequest request) throws IOException {
TKnownledgeFile knownledgeFile = knownledgeFileMapper.selectTKnownledgeFileById(id);
//得到原始文件名称
String fileName = knownledgeFile.getFileName();
HttpHeaders headers = new HttpHeaders();
拿到存在你服务器上的文件,路径必须是绝对路径
File file = new File(FileUploadUtils.getDefaultBaseDir() + knownledgeFile.getFilePath());
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
//判断浏览器类型,火狐的浏览器编码为 iso-8859-1 所以要单独处理
if(request.getHeader("USER-AGENT").toLowerCase().contains("firefox")){
fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
headers.setContentDispositionFormData("attachment", fileName);
}else{
//其他浏览器类型可以用一下代码方式解决中文文件名乱码问题
headers.setContentDispositionFormData("attachment", URLEncoder.encode(fileName, "UTF-8"));
}
return new ResponseEntity<byte[]>(org.apache.commons.io.FileUtils.readFileToByteArray(file), headers, HttpStatus.CREATED);
}
原文:https://www.cnblogs.com/liouzeshuen/p/11848162.html