我正在使用一种帮助我从消息中心获取文件的Web服务。 文件类型可以是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 Attachment获取的文件大小比实际大小多4个字节。
更新:附件编码为7位(如果这可能会阻碍),而另一个包含其他zip的附件则编码为Quote-printable。这两个拉链都是从同一个Web服务中提取的(虽然它们的编码不同),但两者都被破坏了。
编辑:我强烈感觉问题在于我接收文件的编码,这是实际文件和收到的附件文件之间的比较。
实际文件大小:9031字节 收到的附件文件大小:9066字节
我尝试比较文档编辑器中的两个文件,以找出两者之间的差异。 原始文件到提取的附件文件差异(二进制编辑器):
ed改为3f, db改为3f, d6改为3f, 85改为3f, d0改为3f,
等等。
Zip文件包含PDF和XML文件。
两个文件的起始行类似,从PK
开始答案 0 :(得分:3)
我假设您的buf
是一个2048字节的数组。请尝试以下更改
替换
fileStream.write(buf);
用这个
fileStream.write(buf, 0, n);
这是为了修复你上次读取时只得到1024个字节然后buf
的其他1024个字节将有垃圾值并将被写入文件并将其损坏。