如何使用 aws sdk 更新 amazon s3 上对象的元数据?

How to update metdata of object on amazon s3 using aws sdk?

我正在研究与亚马逊 s3 服务相关的 java 项目,在该项目中我使用 jets3 库进行 s3 操作,例如创建存储桶等,现在我将 jets3 替换为 aws-sdk-java-v2 但问题即在 jets3 中有以下更新上传对象元数据的方法是:-

s3ervice.updateObjectMetadata(sBucket, sObject);

但是在新的aws-sdk中我没有找到任何方法。我正在使用以下代码块来更新元数据,但每次内容被替换时,我只想更新元数据而不替换内容,所以请提出建议。

代码:-

    public static boolean updateObjectMetadataByCopyObject(S3Client s3Client,
                                                       String bucketName,
                                                       String objectKey
) {
    Map ds = new HashMap<>();
    ds.put("ds", "dsa");
    String encodedUrl = null;
    try {
        encodedUrl = URLEncoder.encode(bucketName + "/" + objectKey, StandardCharsets.UTF_8.toString());
    } catch (UnsupportedEncodingException e) {
        System.out.println("URL could not be encoded: " + e.getMessage());
    }
    CopyObjectRequest copyReq = CopyObjectRequest.builder()
            .destinationBucket(bucketName).copySource(encodedUrl)
            .destinationKey(objectKey).metadata(ds).storageClass(StorageClass.REDUCED_REDUNDANCY)
            .build();
    try {
        CopyObjectResponse copyRes = s3Client.copyObject(copyReq);
        copyRes.copyObjectResult().toString();
        return true;
    } catch (S3Exception e) {
        throw e;
    }
}## Heading ##

请建议如何使用 aws-sdk-v2 更新上传对象的元数据。

没有复制的元数据

不幸的是,如果不复制对象就无法更新元数据。这是亚马逊的摘录

After you upload the object, you cannot modify object metadata. The only way to modify object metadata is to make a copy of the object and set the metadata. The only way to modify object metadata is to make a copy of the object and set the metadata.

Working with object metadata

此外,即使是通过管理控制台公开的更改元数据的功能也会复制对象。

This action creates a copy of the object with updated settings and the last-modified date.

Editing object metadata in the Amazon S3 console