如何更新现有 Amazon S3 文件的元数据?

我需要更新所有 AmazonS3 云文件中的缓存控制标头。但是,我无法弄清楚如何使用jclouds API做到这一点。我正在使用apache jclouds插件。我得到了两个相关的答案:

第一个答案是建议使用Grails的jcloud插件中没有的SwiftKey Api类。第二个答案是使用AWS java开发工具包,其中已经有一个grails包装插件 https://grails.org/plugin/aws-sdk 但它不支持元数据更新。


答案 1

可以通过执行对象复制来更改元数据 (请参阅如何使用 Amazon S3 开发工具包更新元数据):

ObjectMetadata metadataCopy = new ObjectMetadata();
// copy previous metadata
metadataCopy.addUserMetadata("newmetadata", "newmetadatavalue");

CopyObjectRequest request = new CopyObjectRequest(bucketName, existingKey, bucketName, existingKey)
      .withNewObjectMetadata(metadataCopy);

amazonS3Client.copyObject(request);

这在哲学上是否是“更新”由您决定。


答案 2

你不能:

每个 Amazon S3 对象都有数据、密钥和元数据。对象键(或键名称)唯一标识存储桶中的对象。对象元数据是一组名称-值对。您可以在上传对象元数据时对其进行设置。上传对象后,您无法修改对象元数据。修改对象元数据的唯一方法是创建对象的副本并设置元数据。

http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html


推荐