我正在尝试保存一个通过 multipart/mixed
HTTP 请求上传的二进制文件,它作为一个 @RequestPart ByteArrayResource
到达我的控制器,但是当我使用 FileOutputStream.write
将字节数组保存到磁盘时,与原始文件中的字节不同。
由于与 ASCII 字符对应的字节相同,不同的是具有更高值的字节,因此我认为这是一个字符编码的问题,但设置
<property name="defaultEncoding" value="utf-8"/>
对于
CommonsMultipartResolver
无法解决该问题。
请求部分还具有Content-Transfer-Encoding: binary
,但似乎Commons的多部分解析器正在注入与客户端发送的不完全相同的ByteArrayResource
字节。
我漏掉了什么?
Content-Type: application/octet-stream
? - Pavel HoralHttpServletRequest
传递给我的控制器方法并在其中解析部分,但我仍然不明白为什么解析器会更改请求中的编码以及如何保留它。 - Raibazapplication/octet-stream
存在,但从未像使用字符流(Reader / Writer)一样处理它,那么这是一个严重的错误。Commons-multipart是一个广泛使用的库,如果它包含这样的错误,那就很奇怪了。你确定你正在使用commons-multipart吗?我知道例如Tomcat在Servlet 3多部分支持方面存在一些问题。如果你的配置不正确,以至于commons-multipart实际上没有被使用,那可能就是问题所在。 - Pavel Horal