java - 从 SOAP 附件中提取的 ZIP 文件损坏

标签 java soap zip saaj

我正在使用一种网络服务来帮助我从消息中心获取文件。 文件类型可以是 XML 或 ZIP。

对于 ZIP 文件,内容类型是二进制。

我有这段代码:

private String extractPayload(String filePath, AttachmentPart attach){

        FileOutputStream fileStream = null;

        try {
              DataHandler handler;
              handler = attach.getDataHandler();

              File f = new File(filePath);

              fileStream = new FileOutputStream(filePath);

              handler.writeTo(fileStream);

              fileStream.flush();

        } catch (Exception ex) {

              logger.info("####Exception:" + ex.getMessage());

        } finally {

              if (fileStream != null)
                    fileStream.close();

        }

        return filePath;

现在,代码可以很好地获取 XML 文件,但如果是 ZIP 文件,文件就会损坏。 我使用 Messaging Hub 的文件实用程序下载了相同的文件,发现我通过 SOAP 附件获取的文件大小比其实际大小多大约 4 个字节。

更新: 附件编码为 7 位(如果这可能会造成阻碍),而包含另一个 zip 的另一个附件编码为 Quote-printable。这两个 zip 都是从同一个网络服务中获取的(尽管它们的编码不同),但都已损坏。

编辑:我强烈认为问题出在我接收文件的编码上,这里是实际文件和接收到的附件文件之间的比较。

实际文件大小:9031 字节 收到的附件文件大小:9066 字节

我尝试在文档编辑器中比较这两个文件以找出两者之间的差异。 原始文件与获取的附件文件差异(二进制编辑器):

ed 改为 3f , db 更改为 3f , d6 改为 3f , 85 改为 3f , d0 改为 3f ,

等等。

Zip 文件包含一个 PDF 和一个 XML 文件。

两个文件的起始行相似,都是PK开头<​​/p>

最佳答案

我假设您的 buf 是一个 2048 字节的数组。尝试以下更改

替换

fileStream.write(buf);

有了这个

fileStream.write(buf, 0, n);

这是为了防止在您上次读取时您只得到 1024 字节,然后 buf 的其他 1024 字节将具有垃圾值并且将被写入文件并破坏它。

关于java - 从 SOAP 附件中提取的 ZIP 文件损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15630096/

相关文章:

c# - 使用 EPPLUS C# 创建 Excel XLSX 文件的 ZipArchive

java - 尝试从 ZIP 存档创建 ImageIcon 对象时出现 PNGException "crc corruption"

java - 将非泛型方法转换为泛型方法

java - 安卓.view.InflateException : Binary XML file line #13: Error inflating class ViewPager

node.js - 如何在 node.js 中使用 node-soap 设置 header

java - 使用 spring boot # SOAP Service 并行调用 SOAP 服务

java - Java中根据模型- View - Controller 制作 View

java - 将 AdapterView 与抽屉导航结合起来

c# - VB 6's MSXML2.XMLHTTP vs C#' s WebResponse

c# - ZipArchiveEntry Length 是否返回错误的大小?