如何使用aws-sdk获取AWS S3上的文件的URL?

Pab*_*emé 9 amazon-s3 amazon-web-services node.js

我正在使用AWS Lambda函数创建一个文件并将其保存到S3上的存储桶中,它运行正常.执行该putObject方法后,我得到一个data对象,但它只包含Etag最近添加的对象.

s3.putObject(params, function(err, data) {
    // data only contains Etag
});
Run Code Online (Sandbox Code Playgroud)

我需要知道我可以在浏览器中使用的确切URL,以便客户端可以看到该文件.该文件夹已经公开,如果我从S3控制台复制链接,我可以看到该文件.

我试过使用,getSignedUrl但它返回的URL用于其他目的,我相信.

谢谢!

jar*_*mod 17

当您调用PutObject时,您提供了存储桶和对象的密钥.您可以简单地组合这些来制作对象的URL,例如:

因此,例如,如果您的存储桶是pablo而对象键是dogs/toto.png,请使用:

有关特定于区域的存储桶,请参阅使用Amazon S3存储桶.

注意:对象键的一般指导,其中某些字符需要特殊处理.例如,空格被编码为+(加号),而加号被编码为%2B.还在这里.

  • 就我而言,我也需要存储桶区域:`http://s3.region.amazonaws.com/bucket/key`。对我来说地区是`eu-west-3` (2认同)

adi*_*gil 5

如果您有 s3bucket 和 filename 对象并想提取 url,这里有一个选项:

function getUrlFromBucket(s3Bucket,fileName){
    const {config :{params,region}} = s3Bucket;
    const regionString = region.includes('us-east-1') ?'':('-' + region)
    return `https://${params.Bucket}.s3${regionString}.amazonaws.com/${fileName}`
};
Run Code Online (Sandbox Code Playgroud)