Ruby on rails 如何在s3 aws sdk ruby v3中使用预先签名的URL和标记上载对象

Ruby on rails 如何在s3 aws sdk ruby v3中使用预先签名的URL和标记上载对象,ruby-on-rails,amazon-web-services,amazon-s3,pre-signed-url,aws-sdk-ruby,Ruby On Rails,Amazon Web Services,Amazon S3,Pre Signed Url,Aws Sdk Ruby,我正在尝试使用预先签名的URL上载对象。但是我想上传对象和标签。正确的方法是什么 方法1: 我尝试了以下ruby代码: signer = Aws::S3::Presigner.new signer.presigned_url(:put_object, bucket: bucket_name, key: url, tagging: 'taggingName=tagValue') 但这只是上传对象,而不是添加标记 方法2: 我尝试将“x-amz-tagging”头列入白名单,并尝试从客户端将文件与

我正在尝试使用预先签名的URL上载对象。但是我想上传对象和标签。正确的方法是什么

方法1:

我尝试了以下ruby代码:

signer = Aws::S3::Presigner.new
signer.presigned_url(:put_object, bucket: bucket_name, key: url, tagging: 'taggingName=tagValue')
但这只是上传对象,而不是添加标记

方法2:

我尝试将“x-amz-tagging”头列入白名单,并尝试从客户端将文件与头一起上载

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-tagging”没有签名,这给我带来了一个错误

我使用aws sdk ruby v3(Ror)

按照

为对象设置的标记。标记集必须编码为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]   
     
不过我对JS不太在行

最后但并非最不重要的一点是,检查cloudtrail日志中标记对象的错误

     const tag = signS3URL.tag;
     ...
     const options = {
        url: signedUrl,
        path: fileUrl,
        method: "PUT",
        headers: { "Content-Type": file.mimeType, "X-Amz-Tagging": tag }
    };