压缩多部分文件并通过 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()
之前关闭压缩文件以确保 DirEntries
和 endLocator
已写入文件:
zos.closeEntry();
zos.close();
storeFtp("SAMPLE.zip", new ByteArrayInputStream(baos.toByteArray()));
(我不太了解 Java,所以我无法检查或测试完整代码)
另请查看 this 答案。
我输入了一个多部分文件(即 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()
之前关闭压缩文件以确保 DirEntries
和 endLocator
已写入文件:
zos.closeEntry();
zos.close();
storeFtp("SAMPLE.zip", new ByteArrayInputStream(baos.toByteArray()));
(我不太了解 Java,所以我无法检查或测试完整代码)
另请查看 this 答案。