我正试图保存一个上传的二进制文件,该文件带有一个以multipart/mixed
格式发送到控制器的http请求,但是当我使用@RequestPart ByteArrayResource
将字节数组保存到磁盘时,字节与原始文件中的字节不同。
由于对应于ascii字符的字节是相同的,而不同的字节是具有更高值的字节,所以我认为这是字符编码的问题,但是
<property name="defaultEncoding" value="utf-8"/>
因为
FileOutputStream.write
并不能解决这个问题。请求部分也有
CommonsMultipartResolver
,但看起来commons的多部分解析器注入的Content-Transfer-Encoding: binary
字节与客户端发送的字节不完全相同。我错过了什么?
最佳答案
最后,我通过手动解析请求部分解决了这个问题:
FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = upload.parseRequest(request);
for(FileItem item : items) {
switch(item.getFieldName()) {
//Do something with each of the single parts
}
}
不完全是最干净的方式,但至少我让它工作。
关于spring - CommonsMultipartResolver搞乱了二进制编码,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16982251/