文件下载内容被篡改
-
环境:sprongBoot+hutools工具类
-
代码如下:
/**
* desc: 文件下载
* param: http://127.0.0.1:83/download?path=20200709&fileName=63610ee-862c-4b55-9461-4c1ffe18e1c8@%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20200622141419.jpg
* return:
* author: CDN
* date: 2019/11/17
*/
@GetMapping("download")
public Object download(HttpServletResponse response, @RequestParam Map<String, Object> map) throws IOException {
if (map.isEmpty()) {
return "文件不能为空";
}
String fileUrl =uploadPath+ map.get("path").toString() +File.separator+ map.get("fileName").toString();
// String suffix = map.get("suffix").toString();
ServletOutputStream outputStream = response.getOutputStream();
response.setContentType("application/force-download");
// 设置编码,避免文件名中文乱码
response.setHeader("Content-Disposition", "attachment;filename=" + new String(map.get("fileName").toString().getBytes("gb2312"), "ISO8859-1") );
outputStream.write(FileUtil.readBytes(fileUrl));
IoUtil.close(outputStream);
return null;
}
- 异常描述:文件下载没有报错,但是打开文件,内容是一段异常,内容被篡改
- 原因分析:
文件下载之前没有判断文件是否存在,下载的文件不存在;
File file = FileUtil.file(fileUrl);
if (StringUtils.isEmpty(path) || file == null || !file.exists()) {
throw new ParamException("文件不存在");
}
- 解决方案:
文件下载前,做校验,如果不存在,做相应处理