首页 > 解决方案 > 压缩多部分文件并通过 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)

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

标签: javazipftp-client

解决方案


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

因此,您可能必须在调用之前关闭 zipfilestoreFtp()以确保将DirEntriesendLocator写入文件:

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

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

另请查看答案。


推荐阅读