从SOAP附件中获取ZIP文件损坏
问题描述:
我正在使用Web服务来帮助我从消息中心获取文件。 文件类型可以是XML或ZIP。从SOAP附件中获取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文件都是从相同的web服务中获取的(尽管它们在编码方面有所不同),并且两者都被破坏。
编辑:我强烈地感到问题在于我正在接收文件的编码,这里是实际文件和接收到的附件文件之间的比较。
实际文件大小:9031字节 收到的附件文件大小:9066个字节
我想这两个文件在文档编辑器比较发现两者之间的差异。 原始文件取出的附件文件的差异(二进制编辑):
编改变至3F, 分贝变到图3F中, D6变为3F, 85改变到图3F中, D0变为3F,
等等。
Zip文件包含PDF和XML文件。
两个文件的起始行是相似的,从PK
答
我假设你buf
是2048字节数组。请尝试以下变化
与此
fileStream.write(buf, 0, n);
这是情况来修复你上次看到你得到的只有1024个字节,则其他1024个字节的buf
都会有更换
fileStream.write(buf);
垃圾值,并将被写入文件并将损坏它。
我想你的意思是写(buf,0,n)' - 但前提是正确的。 – 2013-03-27 06:42:45
已经尝试过了。问题是,zis.read()抛出异常java.util.ZipException:无效的块操作。 此外,entry.getSize()(用于获取Zip条目大小)返回-1。 – 2013-03-27 06:43:24
@PriyanshuJha:*它扔哪?你至少应该*做出沙津谈到的改变......因为目前这是一个非常真实的错误。 – 2013-03-27 06:46:43