gpt4 book ai didi

java - HttpServletRequest InputStream 损坏了吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:16:35 32 4
gpt4 key购买 nike

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

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com