我一直在使用Amazon的一些示例代码来获得一个脚本,以便将一个对象上传到aws的php版本3中的桶中。我可以让对象上传到桶中,但是在这个PutObject方法调用期间,我尝试向这个新对象添加一个标记。我研究了一些我发现的例子,但是没有什么对我有用。到目前为止,以下是我的php代码:
$cmd = $s3Client->getCommand('PutObject', [
'Bucket' => $config['s3BucketName'],
'Key' => 'file_upload_direct.mp4',
'Tagging' => 'status=notProcessed',
]);标记属性不会被应用,并且在发送表单时不会出现任何错误。我见过一些向上传添加标签的方法,但这些方法对我都没有用。我试图避免使用PutObjectTagging方法,因为如果我能够在PutObject方法中定义标记,这似乎是额外的工作。我不确定问题是否试图在PutObject中使用getCommand方法,但据我所知,您应该能够将正常参数作为这样的数组传递。有没有人能让这件事起作用,或者我应该尝试用一种不同的方式来完成这件事?
发布于 2021-01-13 19:27:16
迟来总比不去好,对吧?
这里的问题是AWS文档在强调重要细节方面很差,比如:
注意:在使用预签名URL时,并不支持所有操作参数.在发送请求时,某些参数(如SSECustomerKey、ACL )过期、ContentLength或标记必须作为标头提供。
您可以在API文档中找到这些,很容易被忽略。
这意味着准备数据以创建一个签名,该签名如下所示:
$cmd = $s3Client->getCommand('PutObject', [
'Bucket' => $config['s3BucketName'],
'Key' => 'file_upload_direct.mp4',
'Tagging' => 'status=notProcessed',
]);然后,当您从
$s3Client->createPresignedRequest($cmd, '+5 minutes');你把它放到那个网址上,你还必须发送Header X-Amz-Tagging: status=notProcessed
要记住的另一件重要的事情是,如果您是来自前端的PUTting,则您的桶必须有正确的CORS策略,并允许像x-amz-tagging这样的头。
https://stackoverflow.com/questions/60937896
复制相似问题