我试图上传一个对象使用预先签名的URL。但是我想上传这个对象和标签。正确的方法是什么?
方法1:
我尝试了以下红宝石代码:
signer = Aws::S3::Presigner.new
signer.presigned_url(:put_object, bucket: bucket_name, key: url, tagging: 'taggingName=tagValue')
但这只是上传对象,而不是添加标记。
方法2:
我试图白名单‘x-amz-标记’标题,并试图上传文件连同标题从客户端。
Ruby代码:
signer = Aws::S3::Presigner.new
url = signer.presigned_url(:put_object, bucket: bucket_name, key: public_url, whitelist_headers: ['x-amz-tagging'])
客户端代码:
return $http({
method: 'PUT',
url: presigned_url,
ignoreLoadingBar: true,
data: file,
headers: {
'Content-Type': file.type,
'x-amz-tagging': 'taggingName=tagValue'
}
})
但是这是在上传“x-amz标记”没有签名时抛出的错误。
Am使用aws ruby v3 (Ror)
发布于 2021-01-13 12:34:07
根据文档
对象的标记集。标记集必须编码为URL查询参数。(例如,"Key1=Value1")
错误似乎是在说同样的话
“x-amz标记”没有签名。
因此,在创建URL时,需要提供具有相应值的标记类型。
PUT /example-object HTTP/1.1
Host: example-bucket.s3.<Region>.amazonaws.com
Accept: */*
Authorization:authorization string
Date: Thu, 22 Sep 2016 21:58:13 GMT
x-amz-tagging: tag1=value1&tag2=value2
[... bytes of object data]
在同一文档页上的示例6。
无论您在创建签名url时提供了什么标记,都可以从url中提取相同的标记,并将它们传递给x-amz标记的。
就像这样
const tag = signS3URL.tag;
...
const options = {
url: signedUrl,
path: fileUrl,
method: "PUT",
headers: { "Content-Type": file.mimeType, "X-Amz-Tagging": tag }
};
不过,我对JS不太在行。
最后但并非最不重要的一点是,检查cloudtrail日志中是否存在标记对象的错误。
https://stackoverflow.com/questions/65696682
复制相似问题