Nodejs AWS SDK S3 生成预签名 URL [英] Nodejs AWS SDK S3 Generate Presigned 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:
您的存储桶访问策略.
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屋!