如何格式化URL以从Amazon S3获取文件?

54

我遇到了一些问题,无法确定如何从亚马逊S3访问文件。假设文件所在的存储桶是BUCKET_NAME,文件名为FILE_NAME等。我尝试了以下两个URL:

https://s3.amazonaws.com/BUCKET_NAME/FILE_NAME/
?Expires=EXPIRATION
&Signature=SIGNATURE
&SignatureVersion=2
&SignatureMethod=HmacSHA1
&AWSAccessKeyId=KEYID

但这会导致以下错误:

<Code>NoSuchKey</Code>
<Message>The specified key does not exist.</Message>

我也尝试过:

https://s3.amazonaws.com/BUCKET_NAME/
?Key=FILE_NAME
&Expires=EXPIRATION
&Signature=SIGNATURE
&SignatureVersion=2
&SignatureMethod=HmacSHA1
&AWSAccessKeyId=KEYID
但是这会返回一个包含给定存储桶中所有文件列表(包括FILE_NAME)的网页,而不是我想要的特定文件。我也尝试将Action=GetObject添加到URL中,但似乎并没有改变什么。
找出正确的方法以及我做错了什么会很有帮助。我已经在亚马逊的文档中搜索了一段时间,但似乎无法搞清楚。

1
给程序员们看的。我想添加这个链接:http://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html - dibble
6个回答

72

实际上,它的表述更像是:

https://<bucket-name>.s3.amazonaws.com/<key>

点击这里查看。


谢谢您的回复。我也尝试了您提到的方法,但结果相同。 - user1018928
@user1018928 这是一个版本化的存储桶吗?另外需要考虑的是如果该键被删除。 - stevebot

36

文档在这里,我将以法兰克福区域作为示例。

有两种不同的URL格式:

但是这个URL无法使用:

信息很明确:您正在尝试访问的存储桶必须使用指定的终端节点进行寻址。请将所有未来请求发送到此终端节点。

我可能在谈论另一个问题,因为我没有收到NoSuchKey错误,但我怀疑随着时间的推移,错误消息已经变得更加清晰明了。


5
路径样式URL已被弃用。AWS将来某个时候停止支持它们。请参阅https://aws.amazon.com/blogs/aws/amazon-s3-path-deprecation-plan-the-rest-of-the-story/。 - oxley

21

也许不是 OP 想要的,但是对于那些想要简单地访问 S3 上可读对象的人来说,URL 更像是:

https://<region>.amazonaws.com/<bucket-name>/<key>

其中 <region> 是类似于 s3-ap-southeast-2 的东西。

单击 S3 GUI 中的项目以获取存储桶的链接。


将存储桶名称放在路径中而不是域名中已被弃用。 - Aleksandr Dubinsky

3
如 @stevebot 所说,按照以下方法操作: https://<bucket-name>.s3.amazonaws.com/<key> 需要注意的是,您需要将您的存储桶对象全部设置为公共可访问,或者在存储桶策略中添加自定义策略。该自定义策略可以允许来自您网络 IP 范围或不同凭证的流量访问。

1
请注意,如果您位于不同的AWS分区,例如美国政府云或中国,则URL模式略有不同。
对于GovCloud,https://<bucket-name>.s3-<region-name>.amazonaws.com/<key>可用。
中国是这样的https://<bucket-name>.s3-<region-name>.amazonaws.com.cn/<key>

我看到的唯一问题是s3和区域名称之间的连字符,我已经添加了一个非常类似于此的答案。 - Robert Rendell

0

日期是08.03.23,当前格式化URL的方式如下:

https://<bucket>.s3.<region>.amazonaws.com/<key>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接