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

新手上路,请多包涵

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

 s3.putObject(params, function(err, data) {
    // data only contains Etag
});

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

我尝试使用 getSignedUrl 但我相信它返回的 URL 用于其他目的。

谢谢!

原文由 Pablo Quemé 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

SDK 通常不包含为公共可读对象创建 URL 的便捷方法。但是,当您调用 PutObject 时, 提供了存储桶和对象的密钥,这就是您所需要的。您可以简单地将它们组合起来以创建对象的 URL,例如:

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

请注意,S3 密钥不以 / 前缀开头。密钥的形式为 dogs/toto.png ,而不是 /dogs/toto.png

对于特定于区域的存储桶,请参阅 使用 Amazon S3 存储桶AWS S3 URL 样式。将上述 URL 中的 — s3 替换为 s3.<region>.amazonaws.coms3-<region>.amazonaws.com ,例如:

如果您使用的是 IPv6,那么一般的 URL 形式将是:

对于某些存储桶,您可以使用较旧的路径样式 URL。路径样式的 URL 已弃用, 仅适用于 2020 年 9 月 30 日或之前创建的存储桶。它们是这样使用的:

当前存在 TLS 和 SSL 证书问题,可能需要通过路径样式的 URL 访问一些名称中带有点 ( . ) 的存储桶。 AWS 计划解决这个问题。请参阅 AWS 公告

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

原文由 jarmod 发布,翻译遵循 CC BY-SA 4.0 许可协议

如果您获得了 s3bucket 和文件名对象并想要提取 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}`
};

原文由 adir abargil 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题