NodeJS 生成预签名的url时永久重定向

kyxcudwk  于 2023-01-12  发布在  Node.js
关注(0)|答案(1)|浏览(109)

我在nodejs中使用aws-sdk从aws s3创建预签名的url时遇到问题。它给了我PermanentRedirect您尝试访问的存储桶必须使用指定的终结点寻址。

const s3 = new AWS.S3()
    AWS.config.update({accessKeyId: 'test123', secretAccessKey: 'test123'})

    AWS.config.update({region: 'us-east-1'})

    const myBucket = 'test-bucket'
    const myKey = 'test.jpg'
    const signedUrlExpireSeconds = 60 * 60

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

我如何才能消除这个错误,以获得预先签署的网址工作。我还需要知道什么是一个关键的目的。

htrmnn0y

htrmnn0y1#

第1个-您的时段区域是什么?S3是全局服务,但每个时段都有区域,在创建时段时必须选择它。

第二-当工作与S3不在N.Virginia地区时,可能会出现内部aws SSL/DNS不同步的情况。我有这个问题多次,无法找到确切的相关文档,但问题是从重定向的性质,找不到或没有访问权限。然后在4- 12小时后,它开始只是工作。我碰巧挖掘出的关于这些问题的东西是与内部AWS SSL/与不在弗吉尼亚州的S3桶相关的DNS。也可能是这样。
第三种-如果您多次重新创建存储桶并重复使用相同的名称。存储桶名称是全局的,即使存储桶是区域性的。因此,当之前在过去24小时内存储桶实际上位于不同的区域,现在AWS的内部DNS/SSL尚未同步时,可能再次与第二种情况相关。
p.s.键是对象的键,桶中的任何对象都有键。在AWS控制台上,你可以导航“键”,它看起来像文件的路径,但它不是文件的路径。S3没有像硬盘驱动器这样的目录概念。任何文件的路径都是对象的键。AWS控制台只是将对象的键按/拆分,并显示为目录,以便在导航UI时有更好的UX。

相关问题