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

Pri*_*han 25 java grails amazon-s3 amazon-web-services jclouds

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

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

Dan*_*ell 32

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

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

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

amazonS3Client.copyObject(request);
Run Code Online (Sandbox Code Playgroud)

这是哲学上的"更新"取决于你自己决定.


E.J*_*nan 25

你不能:

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

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

  • 我发现有关元数据主题的AWS文档非常令人困惑-除了您提供的链接之外,我还找到了其用户指南的另一个链接,其中显示了如何使用管理控制台添加或删除对象元数据。我能提出的唯一解决冲突的方法是,当他们说“您无法修改对象元数据”时,它们意味着您不能修改特定元数据键的值。你有什么想法 http://docs.aws.amazon.com/AmazonS3/latest/UG/EditingtheMetadataofanObject.html (2认同)

sty*_*yks 7

PHP 示例

我知道这个问题不是 PHP 特有的,但它可能对某人有帮助,因为它是 Google 上的最佳结果。

这将覆盖现有对象。

$client = new \Aws\S3\S3Client([
    'version' => '2006-03-01',
    'region' => 'BUCKET-REGION'
]);

$updateResponse = $client->copyObject([
    'Key' => 'OBJECTKEY',
    'Bucket' =>  'MYBUCKET',
    'CopySource' => 'MYBUCKET/OBJECTKEY',
    'MetadataDirective' => 'REPLACE',
    'Metadata' => [
        'width' => 441,
        'height' => 189
    ]
]);
Run Code Online (Sandbox Code Playgroud)

内容类型是现有的元数据项