【问题标题】:Update zip file in S3 using Java使用 Java 在 S3 中更新 zip 文件
【发布时间】:2021-07-23 10:09:18
【问题描述】:

我有一个 java 应用程序,我想在其中处理大约 10GB 的文件记录并将它们压缩到一个文件夹并上传到 S3。由于整体大小约为 10GB,我无法将所有文件添加到内存中然后上传到 S3,因此我需要在 S3 中创建一个 zip 文件并通过对我的文件进行分区来更新 zip 文件的内容。有什么方法可以在不下载到本地文件夹的情况下更新 S3 中的现有 zip 文件?

【问题讨论】:

    标签: java amazon-web-services amazon-s3 zipfile


    【解决方案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) {
        // ...
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-11-12
      • 1970-01-01
      • 2015-10-29
      • 1970-01-01
      • 2014-08-22
      • 1970-01-01
      • 2021-04-05
      相关资源
      最近更新 更多