我正在使用 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 许可协议
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.com
或s3-<region>.amazonaws.com
,例如:如果您使用的是 IPv6,那么一般的 URL 形式将是:
对于某些存储桶,您可以使用较旧的路径样式 URL。路径样式的 URL 已弃用, 仅适用于 2020 年 9 月 30 日或之前创建的存储桶。它们是这样使用的:
当前存在 TLS 和 SSL 证书问题,可能需要通过路径样式的 URL 访问一些名称中带有点 (
.
) 的存储桶。 AWS 计划解决这个问题。请参阅 AWS 公告。注意: 某些字符需要特殊处理的 对象键 的一般指导。例如,空格编码为 +(加号),加号编码为 %2B。也在 这里。