首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用s3 aws ruby v3中的预签名URL和标记上载对象

如何使用s3 aws ruby v3中的预签名URL和标记上载对象
EN

Stack Overflow用户
提问于 2021-01-13 06:23:14
回答 1查看 1.6K关注 0票数 0

我试图上传一个对象使用预先签名的URL。但是我想上传这个对象和标签。正确的方法是什么?

方法1:

我尝试了以下红宝石代码:

代码语言:javascript
运行
复制
signer = Aws::S3::Presigner.new
signer.presigned_url(:put_object, bucket: bucket_name, key: url, tagging: 'taggingName=tagValue')

但这只是上传对象,而不是添加标记。

方法2:

我试图白名单‘x-amz-标记’标题,并试图上传文件连同标题从客户端。

Ruby代码:

代码语言:javascript
运行
复制
signer = Aws::S3::Presigner.new
url = signer.presigned_url(:put_object, bucket: bucket_name, key: public_url, whitelist_headers: ['x-amz-tagging'])

客户端代码:

代码语言:javascript
运行
复制
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)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-13 12:34:07

根据文档

对象的标记集。标记集必须编码为URL查询参数。(例如,"Key1=Value1")

错误似乎是在说同样的话

“x-amz标记”没有签名。

因此,在创建URL时,需要提供具有相应值的标记类型。

代码语言:javascript
运行
复制
    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标记的

就像这样

代码语言:javascript
运行
复制
     const tag = signS3URL.tag;
     ...
     const options = {
        url: signedUrl,
        path: fileUrl,
        method: "PUT",
        headers: { "Content-Type": file.mimeType, "X-Amz-Tagging": tag }
    };

不过,我对JS不太在行。

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65696682

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档