记一次SpringBoot ResponseEntity 下载乱码,文件损坏问题
1.第一种原因
今天在做下载时采用
public static ResponseEntity<byte[]> buildResponseEntity(File file, String fileName) throws IOException {
byte[] body = FileUtils.readFileToByteArray(file);
HttpHeaders headers = new HttpHeaders();
String downloadFielName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
headers.setContentDispositionFormData("attachment", downloadFielName);
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
return new ResponseEntity<byte[]>(body, headers, HttpStatus.OK);
}
方式发现下载excel,zip等文件出现文件损坏问题,按照网上搜索设置各种文件格式, 请求头等 皆无效.
于是进入target/class下查看源文件发现源文件已经损坏, 经查询发现maven编译时已经损坏,
参考
最后增加pom.xml中resources-plugin配置
<configuration>
<encoding>UTF-8</encoding>
<nonFilteredFileExtensions>
<nonFilteredFileExtension>xls</nonFilteredFileExtension>
<nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
<nonFilteredFileExtension>zip</nonFilteredFileExtension>
<nonFilteredFileExtension>dat</nonFilteredFileExtension>
</nonFilteredFileExtensions>
</configuration>
此方式也适用于各种证书私钥解析时报错问题
java.io.IOException: DerInputStream.getLength(): lengthTag=111, too big.
2.第二种原因
当使用fastjson 作为消息转换器时需要将
MediaType.APPLICATION_OCTET_STREAM MediaType.APPLICATION_PDF
这两种类型移除掉.
