【问题标题】:Presigned URL generates an error - Nodejs AWS SDK S3预签名 URL 生成错误 - Nodejs AWS SDK S3
【发布时间】:2019-09-20 19:04:51
【问题描述】:

我正在使用 NodeJS AWS 开发工具包生成预签名的 S3 url。这是我的代码

const s3 = new AWS.S3({accessKeyId: IAM_USER_KEY, secretAccessKey:IAM_USER_SECRET});

const myKey = 'test.csv';
const signedUrlExpireSeconds = 60 * 5;

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

console.log(url)

当我使用浏览器访问该网址时,它会显示此错误

<Error>
<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>
<Key>test.csv</Key>
<RequestId>EAFAC43D236CAFDF</RequestId>
<HostId>
knOGCpoUWq4TaRJmkx+ztWFliPOSABdnineRyNhhkqc/ahgPTpYSA+Aawmj5w2odWMt2kk3fGhY=
</HostId>
</Error>

在客户端,它返回 400 错误请求错误。错误的存储桶名称、密钥或密钥会为每个返回不同的错误,所以我认为这不是拼写错误,但我不知道错误来自哪里。

【问题讨论】:

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


    【解决方案1】:

    NoSuchKey 是 404 错误,而不是 400。

    这里的“键”是对象键。

    &lt;Key&gt;test.csv&lt;/Key&gt;

    在这个名为test.csv 的存储桶的根目录中没有文件。对象键区分大小写。

    如果您在 S3 控制台中看不到该对象,那么这当然是问题所在。

    如果对象出现在控制台的文件夹中,则需要将其包含在密钥中 -- 对于文件夹 documents 内的文件 test.csv,您需要使用的 Keydocuments/test.csv

    如果您在控制台中看到此对象,请检查控制台中的链接是否有特殊的不可打印字符,例如您在上传对象时可能无意中包含的 %0A(换行符)。

    【讨论】:

    • 但是我正在使用此代码生成预签名的 url,显然我的存储桶中没有具有该名称的文件,我只是想创建它
    • 我将 getObject 切换为 putObject,现在我收到此错误:我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
    猜你喜欢
    • 2016-12-14
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 2023-01-19
    • 2019-03-11
    • 1970-01-01
    • 2019-12-14
    • 2018-02-02
    相关资源
    最近更新 更多