使用 Java 在 S3 中更新 zip 文件
Posted
技术标签:
【中文标题】使用 Java 在 S3 中更新 zip 文件【英文标题】:Update zip file in S3 using Java 【发布时间】:2021-07-23 10:09:18 【问题描述】:我有一个 java 应用程序,我想在其中处理大约 10GB 的文件记录并将它们压缩到一个文件夹并上传到 S3。由于整体大小约为 10GB,我无法将所有文件添加到内存中然后上传到 S3,因此我需要在 S3 中创建一个 zip 文件并通过对我的文件进行分区来更新 zip 文件的内容。有什么方法可以在不下载到本地文件夹的情况下更新 S3 中的现有 zip 文件?
【问题讨论】:
【参考方案1】:你可以使用 aws java sdk 来实现它
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk</artifactId>
<version>1.11.398</version>
</dependency>
使用以下方法创建一个 amazon s3 客户端
BasicAWSCredentials credentials = new BasicAWSCredentials("access_key", "secret_key");
AmazonS3 amazonS3 = AmazonS3ClientBuilder.standard().withCredentials(new AWSStaticCredentialsProvider(credentials)).build();
创建一个 TransferManager 并设置 MultipartUploadThresholdload。 Amazon S3 规定最小部分大小为 5mb,所以我们在这里使用 5mb。您可以根据需要增加尺寸。
TransferManager tm = TransferManagerBuilder.standard()
.withS3Client(amazonS3)
.withMultipartUploadThreshold((long) (5 * 1024 * 1024))
.build();
设置您要上传的 S3 存储桶名称,keyName 将用于命名上传的文件。 tm.upload 将在后台启动上传过程。
String bucketName = "my-bucket";
String keyName = "mydata.zip";
File file = new File("path_to_file/mydata.zip");
Upload upload = tm.upload(bucketName, keyName, file);
waitForCompletion 是阻塞调用,一旦函数完成上传文件到 s3 就会返回结果。
try
upload.waitForCompletion();
catch (AmazonClientException e)
// ...
【讨论】:
以上是关于使用 Java 在 S3 中更新 zip 文件的主要内容,如果未能解决你的问题,请参考以下文章