如何通过 java sdk 更改 AWS S3 对象上的存储 Class

How to change Storage Class on AWS S3 object via java sdk

我是 AWS 新手,我需要为 s3 存储桶中的现有对象设置存储 Class。如何使用 java SDK

更改 S3 中对象的存储 class

changeObjectStorageClass看起来很简单:

AmazonS3Client s3Client = (AmazonS3Client)AmazonS3ClientBuilder.standard()
                    .withRegion(clientRegion)
                    .withCredentials(new ProfileCredentialsProvider())
                    .build();

PutObjectRequest request = new PutObjectRequest(bucketName,
                                                fileObjKeyName, new File(fileName));
ObjectMetadata metadata = new ObjectMetadata();
metadata.setContentType("binary/octet-stream");
request.setMetadata(metadata);
s3Client.putObject(request);

s3Client.changeObjectStorageClass(bucketName, fileObjKeyName,
                                  StorageClass.ReducedRedundancy );

唯一奇怪的部分是您需要在 AmazonS3Client 的实例上使用 changeObjectStorageClass - 接口 AmazonS3 上的版本已弃用。

在任何情况下都不需要使用已弃用的方法。 在我的例子中需要更新现有对象:

   AmazonS3Client s3Client =  (AmazonS3Client)AmazonS3ClientBuilder.standard()
                .withRegion(clientRegion)
                .withCredentials(new ProfileCredentialsProvider())
                .build();
  CopyObjectRequest copyRequest = new CopyObjectRequest(sourceBucketName, sourceKey, destinationBucketName, destinationKey)
        .withStorageClass(StorageClass.ReducedRedundancy);
        s3Client.copyObject(copyRequest);