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

问题描述

我正在开发与亚马逊 s3 服务相关的 java 项目,其中我使用 jets3 库进行 s3 操作,例如创建存储桶等,现在我正在用 aws-sdk-java-v2 替换 jets3,但问题 ie 在 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 更新上传对象的元数据。

解决方法

没有复制的元数据

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

上传对象后,您将无法修改对象元数据。修改对象元数据的唯一方法是制作对象的副本并设置元数据。修改对象元数据的唯一方法是制作对象的副本并设置元数据。

Working with object metadata

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

此操作会使用更新的设置和上次修改日期创建对象的副本。

Editing object metadata in the Amazon S3 console