我正在尝试将多个文件读取为BLOB(从数据库中),解压缩,压缩并使用JAX-WS流式压缩文件。上面的代码以流方式发送zip文件,但是Windows程序未打开下载的zip文件,并抛出CRC错误。在浏览了一些帖子之后,我添加了zipOutputStream.finish()(就在zipOutStream.flush()之前),该文件似乎可以修复错误,但仅压缩一个文件,而忽略其他文件。
任何帮助深表感谢
try (ResultSet resultSet = pstmt.executeQuery()) {
try (ByteArrayOutputStream byteStream = new ByteArrayOutputStream()) {
try (ZipOutputStream zipOutputStream = new ZipOutputStream(byteStream)) {
while (resultSet.next()) {
Blob blob = getBlob();
try (InputStream fileInputStream = new GZIPInputStream(blob.getBinaryStream())) {
try (ByteArrayOutputStream fileByteStream = new ByteArrayOutputStream()) {
// Custom method: Copy the above fileInputStream to fileByteStream
IOUtils.copy(fileInputStream, fileByteStream);
ZipEntry entry = new ZipEntry(fileName);
zipOutputStream.putNextEntry(entry);
zipOutputStream.write(fileInputStream.toByteArray());
zipOutputStream.flush();
zipOutputStream.closeEntry();
}
}
try (InputStream inputStream = new ByteArrayInputStream(byteStream.toByteArray());) {
InputStreamDataSource inputDataSource = new InputStreamDataSource(fileName, inputStream);
dataHandler = new DataHandler(inputDataSource);
}
}
}
}
}
最佳答案
关闭流
您成功关闭了zip文件中的每个条目。
但是您错过了关闭ZipOutputStream的机会!ZipOutputStream.close()
方法确实写入目录结构。
顺便说一下...。您确实不需要zip文件末尾的目录结构。它仅出于兼容性原因而已。
关于java - Zip文件流引发CRC错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49373714/