java - HttpServletRequest InputStream 损坏了吗?

标签 java servlets soap mime mms

我正在通过 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。

最佳答案

根据评论,文件似乎已正确写入磁盘(这是我的解释)。

WinSCP 用于将文件从 (Linux/Unix) 机器传输到 Windows 机器。传输过程中采用的传输模式可能导致 WinSCP 将所有 unix 样式的行结尾转换为 Windows 样式的行结尾,或者反之亦然,具体取决于传输的来源。当使用文本模式传输文件时,或者当 WinSCP 被允许确定它应该使用文本模式还是二进制模式传输文件时,就会发生这种情况。您可能已将其设置为默认模式,因此强制以二进制方式传输文件;如果这不起作用,您需要进一步调查。

如果 WinSCP 似乎是此问题的原因,您可以通过查看两个平台上文件的二进制内容来确认它。你可以使用 xxd on Linux/Unix .在 Windows 上,this question 中列出的实用程序之一会有帮助。

您还可以使用任何其他文件复制协议(protocol),如 FTP、SFTP,甚至使用 NFS 或 Samba 来传输文件,并建立 WinSCP 作为原因。

关于java - HttpServletRequest InputStream 损坏了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6383859/

相关文章:

Java,console.readPassword 添加了额外的行。怎么删除呢?

ruby-on-rails - 10001 尝试使用 Activemerchant 从 PayPal 获取授权时出现内部错误

java - Eclipse 和 Apache Axis2 插件 Java Soap——找不到类

java - 无法从照片中裁剪图像

java - 这与android studio ide问题有关,更新我们的ide后

java - 如何在 Java 控制台应用程序中加载图像? (没有小程序)

java - 无法确定哪个 tomcat 过滤器会删除我们在过滤器链中的自定义 tomcat 过滤器注入(inject)到 httpservletresponse 中的数据

java - java(jsp、servlet、mysql)中图像保存、编辑、删除到特定文件夹并将路径和其他数据保存在数据库中

java - 如何将 session 值从一个 servlet 检索到另一个 servlet?

java - 从 org.apache.camel.Exchange 获取 SOAPMessage