【问题标题】:How to add tags when uploading an object to an S3 bucket将对象上传到 S3 存储桶时如何添加标签
【发布时间】:2020-03-30 19:16:49
【问题描述】:

我一直在使用来自 Amazon 的一些示例代码来获取脚本,以将对象上传到 aws 的 php sdk 版本 3 中的存储桶。我可以让对象上传到存储桶,但我试图在这个 PutObject 方法调用期间向这个新对象添加一个标签。我已经完成了一些我发现的例子,但没有任何东西对我有用。到目前为止,这是我的 php 代码:

$cmd = $s3Client->getCommand('PutObject', [
    'Bucket' => $config['s3BucketName'],
    'Key' => 'file_upload_direct.mp4',
    'Tagging' => 'status=notProcessed',
]);

标签属性不会被应用,并且在发送表单时不会给出任何错误。我已经看到了几种为上传添加标签的方法,但这些方法都不适合我。我试图避免使用 PutObjectTagging 方法,因为如果我能够在 PutObject 方法中定义标记,那似乎是额外的工作。我不确定问题是否试图在 getCommand 中使用 PutObject 方法,但据我所知,您应该能够像这样将普通参数作为数组传递。有没有人能够让这个工作,或者我应该尝试不同的方式来完成这个?

【问题讨论】:

  • 感谢@JohnRotenstein 的回复。当我第一次在网上搜索解决方案时,我遇到了这些。不幸的是,这些对我不起作用。我确实注意到我给了我的桶错误的权限来查看 putObject 标记。我使用 s3:putBucketTagging 而不是 s3:putObjectTagging。一旦我进行了更改,它仍然无法正常工作。由于我还在开发和测试,我给了存储桶策略的所有权限,但是我仍然无法在上传时标记对象。
  • 您可以暂时授予您的代码s3:* 权限,以确定问题是否与权限有关。这些权限应该授予您的应用,而不是存储桶。
  • 直接上传也有类似的问题。一切正常,但标签字段中没有任何内容。我必须给存储桶一个粘贴标签的策略。仍然没有标签,但也没有错误......

标签: php amazon-web-services amazon-s3 aws-php-sdk


【解决方案1】:

迟到总比没有好,对吧?

这里的问题是 AWS Docs 没有强调重要的细节,例如:

注意:使用预签名 URL 时,并非所有操作参数都受支持。发送请求时,必须提供某些参数,例如 SSECustomerKey、ACL、Expires、ContentLength 或 Tagging。

您可以在 API Docs 中找到这些并且很容易忽略。

这意味着您准备数据以创建签名:

$cmd = $s3Client->getCommand('PutObject', [
  'Bucket' => $config['s3BucketName'],
  'Key' => 'file_upload_direct.mp4',
  'Tagging' => 'status=notProcessed',
]);

然后当你从那里得到 URL 时

$s3Client->createPresignedRequest($cmd, '+5 minutes');

而你 PUT 到那个 URL,你还必须发送 HTTP Header X-Amz-Tagging: status=notProcessed

要记住的另一件重要事情是,如果您从前端进行 PUT,则您的存储桶必须正确设置 CORS 策略并允许像 x-amz-tagging 这样的标头。

【讨论】:

    猜你喜欢
    • 2018-08-09
    • 2020-10-17
    • 2018-03-11
    • 2017-04-19
    • 1970-01-01
    • 2022-11-23
    • 2022-01-07
    • 1970-01-01
    • 2021-08-26
    相关资源
    最近更新 更多