压缩多部分文件并通过 FTP 存储

Zip multipartfile and store via FTP

我输入了一个多部分文件(即 SAMPLE.csv)。 我应该压缩它(即 SAMPLE.zip)并通过 FTP.

存储它
public void zipAndStore(MultipartFile file) {
    try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
         ZipOutputStream zos = new ZipOutputStream(baos);
         InputStream is = file.getInputStream()) {
         ZipEntry zipEntry = new ZipEntry("SAMPLE.zip");
         zos.putNextEntry(zipEntry);
         byte[] bytes = new byte[1024];
         int length;
         while ((length = is.read(bytes)) >= 0) {
              zos.write(bytes, 0, length);
         }
         zos.closeEntry();
         storeFtp("SAMPLE.zip", new ByteArrayInputStream(baos.toByteArray()));
     } catch (Exception e) {
     }
}

storeFtp使用org.apache.commons.net.ftp.FTPClient.storeFile(String remote, InputStream local)方法。

问题是上传的文件损坏了,无法手动解压。 怎么了?

一个压缩文件在文件末尾有一个 DirEntries 和一个 endLocator 列表(在所有 ZipFileRecords 之后,即代码中的 ZipEntries)。

因此您可能必须在调用 storeFtp() 之前关闭压缩文件以确保 DirEntriesendLocator 已写入文件:

zos.closeEntry();
zos.close();
storeFtp("SAMPLE.zip", new ByteArrayInputStream(baos.toByteArray()));

(我不太了解 Java,所以我无法检查或测试完整代码)

另请查看 this 答案。