为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Go 中向 AWS S3 预签名 URL 添加标头?

如何在 Go 中向 AWS S3 预签名 URL 添加标头?

Go
牛魔王的故事 2022-07-11 15:25:48
我正在使用预签名 URL 将文件上传到 AWS S3 存储桶。这工作正常,但如果我尝试添加x-amz-tagging标头,我会收到错误“请求中存在未签名的标头”。生成预签名 URL 的后端是用 Go 编写的:// Upload generates a new URL where a file can be uploadedfunc (s *S3) Upload(key string, c Config) (string, error) {    req, _ := s.client.PutObjectRequest(&s3.PutObjectInput{        Bucket: aws.String(s.bucketName),        Key:    aws.String(key),    })    return req.Presign(c.ExpiresIn)}S3 预签名上传 url 错误的答案表明我们需要将标头声明为预签名 URL 的一部分。如何为此添加标题声明?为 Amazon S3 存储桶创建预签名 URL 中给出的示例未涵盖此内容。
查看完整描述

2 回答

?
千万里不及你

TA贡献1784条经验 获得超9个赞

预签名的 URL 请求只需要 Tagging 字段下的标签。当您使用此 URL 发出请求时,即您传递带有“x-amz-tagging”作为键和标签的标头(例如,“temp=true&public=yes”)。


下面是一个使用预签名 url 上传带有标签的图像(通过标题)的示例,该 url 也被请求带有标签(带有标签)。


  const uploadImage = async (filepath, presignedURL) => {

    const headers = new Headers();

    headers.append('x-amz-tagging', 'temp=true&public=yes');

    const response = await fetch(filepath);

    const blob = await response.blob();

    return await fetch(

      presignedURL,

      {

        method: 'PUT',

        body: blob,

        headers,

      },

    );

};


查看完整回答
反对 回复 2022-07-11
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

如果我没记错的话,您可以像这样添加元数据:


  'Bucket': 'bucket',

  'Key': 'signed.json',

  'Metadata': {

    'x-amz-tagging': 'whatever'

  },

所以它看起来像这样:


// Upload generates a new URL where a file can be uploaded

func (s *S3) Upload(key string, c Config) (string, error) {

    req, _ := s.client.PutObjectRequest(&s3.PutObjectInput{

        Bucket: aws.String(s.bucketName),

        Key:    aws.String(key),

        Body: {

                'x-amz-tagging': 'whatever'

       },

    })


    return req.Presign(c.ExpiresIn)

}

我是即时写的,所以它可能不起作用,需要一些调整。请参阅文档 - 但它应该看起来像这样。测试一下,让我知道。


在此处阅读更多信息:https ://docs.aws.amazon.com/sdk-for-go/api/service/s3/#PutObjectInput


查看完整回答
反对 回复 2022-07-11
  • 2 回答
  • 0 关注
  • 143 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信