Nodejs AWS SDK S3 生成预​​签名 URL [英] Nodejs AWS SDK S3 Generate Presigned URL

查看:60
本文介绍了Nodejs AWS SDK S3 生成预​​签名 URL的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用 NodeJS AWS 开发工具包来生成预先签名的 S3 URL.文档给出了一个 生成预签名 URL 的示例.

I am using the NodeJS AWS SDK to generate a presigned S3 URL. The docs give an example of generating a presigned URL.

这是我的确切代码(省略了敏感信息):

Here is my exact code (with sensitive info omitted):

const AWS = require('aws-sdk')

const s3 = new AWS.S3()
AWS.config.update({accessKeyId: 'id-omitted', secretAccessKey: 'key-omitted'})

// Tried with and without this. Since s3 is not region-specific, I don't
// think it should be necessary.
// AWS.config.update({region: 'us-west-2'})

const myBucket = 'bucket-name'
const myKey = 'file-name.pdf'
const signedUrlExpireSeconds = 60 * 5

const url = s3.getSignedUrl('getObject', {
    Bucket: myBucket,
    Key: myKey,
    Expires: signedUrlExpireSeconds
})

console.log(url)

生成的 URL 如下所示:

The URL that generates looks like this:

https://bucket-name.s3-us-west-2.amazonaws.com/file-name.pdf?AWSAccessKeyId=[access-key-omitted]&Expires=1470666057&Signature=[signature-omitted]

我正在将该 URL 复制到我的浏览器中并得到以下响应:

I am copying that URL into my browser and getting the following response:

<Error>
  <Code>NoSuchBucket</Code>
  <Message>The specified bucket does not exist</Message>
  <BucketName>[bucket-name-omitted]</BucketName>
  <RequestId>D1A358D276305A5C</RequestId>
  <HostId>
    bz2OxmZcEM2173kXEDbKIZrlX508qSv+CVydHz3w6FFPFwC0CtaCa/TqDQYDmHQdI1oMlc07wWk=
  </HostId>
</Error>

我知道存储桶存在.当我通过 AWS Web GUI 导航到此项目并双击它时,它会打开带有 URL 的对象并且工作正常:

I know the bucket exists. When I navigate to this item via the AWS Web GUI and double click on it, it opens the object with URL and works just fine:

https://s3-us-west-2.amazonaws.com/[bucket-name-omitted]/[file-name-omitted].pdf?X-Amz-Date=20160808T141832Z&X-Amz-Expires=300&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=[signature-omitted]&X-Amz-Credential=ASIAJKXDBR5CW3XXF5VQ/20160808/us-west-2/s3/aws4_request&X-Amz-SignedHeaders=Host&x-amz-security-token=[really-long-key]

因此,我相信我使用 SDK 的方式一定有问题.

So I am led to believe that I must be doing something wrong with how I'm using the SDK.

推荐答案

Dustin,

您的代码正确,请仔细检查以下内容:

Your code is correct, double check following:

  1. 您的存储桶访问策略.

  1. Your bucket access policy.

您通过 API 密钥获得的存储桶权限.

Your bucket permission via your API key.

您的 API 密钥和秘密.

Your API key and secret.

您的存储桶名称和密钥.

Your bucket name and key.

这篇关于Nodejs AWS SDK S3 生成预​​签名 URL的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆