【发布时间】:2011-09-17 01:14:49
【问题描述】:
我通过 java servlet 接收 SOAPMessage,其附件部分包含多部分 mime。这样做:
InputStream inputStream = request.getInputStream();
byte[] data = IOUtils.toByteArray(inputStream);
File file = new File("/usr/local/user/message.txt");
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
为我提供多部分 mime 中二进制代码的损坏数据。任何人都知道为什么会这样?我将二进制数据复制到一个文件中,并将文件扩展名更改为适当的图像扩展名,但我得到一个损坏的图像。比较 message.txt 和 .snoop 文件的十六进制数据可以看出,导致失真的十六进制数据略有不同。 ASCII 数据没有变化。谢谢。
有失真,因为您可以看到图片一开始看起来是正确的,但一段时间后它开始看起来很奇怪,因为十六进制值是错误的。例如:06 04 04 04 04 04 06 04 04 06 0a 在我执行上述操作后,来自客户端的变为 06 04 04 04 04 04 06 04 04 06 0D。
【问题讨论】:
-
“比较message.txt的十六进制数据和一个.snoop文件,发现十六进制数据有细微的差别,导致失真”。你能扩展这些扭曲吗?另外,如果你有网络监听/捕获,你能用客户端发送的 Content-Encoding 标头更新问题吗?
-
内容编码未发送,所以假设它是二进制的。失真,你可以看到图片一开始看起来是正确的,但一段时间后它开始看起来很奇怪,因为十六进制值是错误的。例如: 06 04 04 04 04 04 06 04 04 06 0a 在我执行上述操作后,来自客户端的变为 06 04 04 04 04 04 06 04 04 06 0D。
-
0A 是 LF,0D 是 CR。我认为这是 unix vs windows 行尾的问题。
-
我正在将文件写入 Linux 系统。使用 WINSCP 我将文件复制到 Windows 机器上以查看它。这会导致数据发生变化吗?不只是 0A 和 0D,其他一些数据也发生了变化,然后它们看起来又一样了。
-
可能(假设您最初将文件命名为
.txt)。阅读 WinSCP 站点中的this FAQ。 编辑:使用二进制方式传输,看看有没有区别。
标签: java servlets soap mime mms