CommonsMultipartResolver搞乱了二进制编码

时间:2013-06-07 10:46:43

标签: spring http encoding apache-commons multipartform-data

我正在尝试保存上传时带有multipart/mixed HTTP请求的二进制文件,该请求以@RequestPart ByteArrayResource的形式到达我的控制器,但是当我使用FileOutputStream.write将字节数组保存到磁盘时字节与原始文件中的字节不同。

由于与ASCII字符对应的字节相同而且不同的字节是具有较高值的​​字节,因此我认为这是字符编码问题,但设置

<property name="defaultEncoding" value="utf-8"/>
CommonsMultipartResolver

无法解决问题。

请求部分也有Content-Transfer-Encoding: binary,但看起来Commons的多部分解析器注入的ByteArrayResource字节与客户端发送的字节不完全相同。

我错过了什么?

1 个答案:

答案 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
    }
}

不完全是最干净的方式,但至少我让它运转起来。