如何使用 getSignedUrl 操作从 Amazon s3 访问对象

Posted

技术标签:

【中文标题】如何使用 getSignedUrl 操作从 Amazon s3 访问对象【英文标题】:How to Access Object From Amazon s3 using getSignedUrl Operation 【发布时间】:2018-03-17 04:31:42 【问题描述】:

我可以使用 getSignedUrl 方法生成签名的 url。

var url = s3.getSignedUrl('getObject', paramsurl);

使用这个 url 我可以从 s3 访问完整的对象吗?我发出 http 请求,但它只返回 1000 作为 xml 响应。如何找到下一组对象并推送到新数组?

【问题讨论】:

访问哪里?您甚至可以在浏览器地址栏中发布该 url 值,它会下载文件(对象) @ Lemuel Nabong 我正在使用这个signedurl进行http调用,当我这样做时它只返回1000个对象作为响应,但我的s3存储桶有超过1800条记录。如何获取1001到1800的记录。 您正在为 / 的 URL 签名——存储桶列表——而不是 /some-object.jpg(路径和文件名,S3 将其称为 对象密钥)。 是的,你是对的 【参考方案1】:

您的问题似乎与在单个 ListObjects 调用中返回了多少 S3 对象有关。

如果是这样,当您调用列出 AWS 资源的底层 API 时,该 API 通常会默认返回 1000 个项目。它还将返回一个“下一个令牌”,您可以在随后调用同一 API 时使用它来返回下一批项目。

有时,您还可以在请求中指定“最大项”或“最大键”,以允许您覆盖默认值 1000。

PS 如果您使用 AWS 开发工具包,那么这批结果通常对您隐藏。

【讨论】:

非常感谢一个简单的问题,我的预签名网址是这样的:test1.s3.amazonaws.com/… 现在我可以使用 s3.listObjectsV2 方法使用这些访问密钥和签名从 s3 获取对象吗? 预签名 URL 专门用于下载或上传对象,因此下载者/上传者不需要知道任何凭据。它们与列出对象无关。您通常会使用相同的 AWS 凭证(访问密钥和秘密密钥)来列出对象并生成预签名 URL。然后,您可以将这些预签名的 URL 提供给您的客户端,以用于下载/上传对象。 基本上,我的团队只提供了预签名的 url 来临时获取对象的访问权限。他们只会调用该 API 来获取签名的 URL 并将其发送到 JS 函数,以便 js 函数必须从 s3 获取对象并在客户端更新表。一旦我得到一个对象,我将对其进行解构并存储到我的数组中。 即使我尝试使用 http 调用,但它返回 xml 并且无法找到下一个令牌。 文档建议 ListObjects 返回一个 NextContinuationToken 元素,您在下一个 API 请求中提供该元素作为 continuation-token。您还应该看到 IsTruncated 在结果已被截断的响应上设置为 true(即有更多结果可用)。您在查看 XML 响应吗?你看到 IsTruncated 和/或 NextContinuationToken 了吗?

以上是关于如何使用 getSignedUrl 操作从 Amazon s3 访问对象的主要内容,如果未能解决你的问题,请参考以下文章

Firebase 的签名错误 getSignedUrl()

AWS S3 getSignedUrl() 返回 403 禁止错误

Google Cloud Function 中的 getSignedURL() 生成的链接可以使用几天,然后返回“SignatureDoesNotMatch”

AWS S3 在 getSignedUrl 过期后优雅地处理 403

如何让 Lambda 函数等待异步操作完成?

焦点对话AMA:Cirus如何重新定义所有权经济 用数据释放时代价值