【问题标题】:AWS S3 getSignedUrl constructs wrong URLAWS S3 getSignedUrl 构造错误的 URL
【发布时间】:2017-02-23 15:48:24
【问题描述】:

我想为我的 S3 存储桶获取一个预签名的 URL,用于像这样的 PUT 请求(在 node.js 中)

   AWS.config.update({
      accessKeyId: s3Config.accessKeyId,
      secretAccessKey: s3Config.secretAccessKey,
      region: s3Config.region,
      signatureVersion: 'v4'
   });
   var s3bucket = new AWS.S3({params: {Bucket: s3Config.bucket,Key:'/content'}});
   s3Config.preSignedURL = s3bucket.getSignedUrl('putObject',{ACL:s3Config.acl})

结果我得到了

https://[BUCKET].s3.[REGION].amazonaws.com/[KEY]?[presignedURLStuff]

这个网址是根据亚马逊错误的。 URL 必须采用http://*.s3.amazonaws.com/* 格式。我还从飞行前得到错误 net::ERR_INSECURE_RESPONSE。我该怎么做才能使函数构造正确的 URL。从 URL 中删除区域会导致 400 Bad Request。飞行前选项然后工作。

【问题讨论】:

  • 存储桶位于哪个区域,您对正确 URL 的看法如何?对于某些地区,您显示的格式似乎是一个有效的替代方案。
  • 返回的网址有效吗?
  • s3-eu-west-1 是我的地区。根据亚马逊,只有 http://*.s3.amazonaws.com/* 格式的 URL 是有效的,返回的 URL 给了我一个错误,甚至飞行前都不会回来

标签: node.js amazon-web-services amazon-s3


【解决方案1】:

我认为 PUT 请求需要转到特定的存储桶区域。

如果由于某种原因,您返回的 URL 包含错误的存储桶区域(例如您的 EC2 实例位于不同的区域),您可以在 S3 初始化中设置存储桶区域。

return new aws.S3({region:"s3-eu-west-1"})

【讨论】:

    猜你喜欢
    • 2019-04-29
    • 2021-06-17
    • 2018-12-03
    • 1970-01-01
    • 2019-03-30
    • 2016-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多