需要使用流的分段上传方式将大文件上传到AWS S3,而不是使用lambda的/tmp。文件已上传但未完全上传。
在我的情况下,zip中每个文件的大小无法预测,可能一个文件的大小可达1 Gib。所以我使用ZipInputStream从S3读取,我想将其上传回S3。因为我正在研究lambda ,由于文件太大,我无法将文件保存在 lambda 的 /tmp 中。因此我尝试使用 S3 分段上传直接读取并上传到 S3,而不保存在 /tmp 中。但我遇到了一个问题,文件没有完全写入。我怀疑文件每次都被覆盖。请查看我的代码并提供帮助。
public void zipAndUpload {
byte[] buffer = new byte[1024];
try{
File folder = new File(outputFolder);
if(!folder.exists()){
folder.mkdir();
}
AmazonS3 s3Client = AmazonS3ClientBuilder.defaultClient();
S3Object object = s3Client.getObject("mybucket.s3.com","MyFilePath/MyZip.zip");
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(s3Client)
.build();
ZipInputStream zis =
new ZipInputStream(object.getObjectContent());
ZipEntry ze = zis.getNextEntry();
while(ze!=null){
String fileName = ze.getName();
System.out.println("ZE " + ze + " : " + fileName);
File newFile = new File(outputFolder + File.separator + fileName);
if …Run Code Online (Sandbox Code Playgroud)