我正在尝试保存上传时带有multipart/mixed
HTTP请求的二进制文件,该请求以@RequestPart ByteArrayResource
的形式到达我的控制器,但是当我使用FileOutputStream.write
将字节数组保存到磁盘时字节与原始文件中的字节不同。
由于与ASCII字符对应的字节相同而且不同的字节是具有较高值的字节,因此我认为这是字符编码问题,但设置
<property name="defaultEncoding" value="utf-8"/>
CommonsMultipartResolver
的无法解决问题。
请求部分也有Content-Transfer-Encoding: binary
,但看起来Commons的多部分解析器注入的ByteArrayResource
字节与客户端发送的字节不完全相同。
我错过了什么?
答案 0 :(得分:0)
最后,我通过手动解析请求部分来解决它:
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
}
}
不完全是最干净的方式,但至少我让它运转起来。