在谷歌云存储中使用带有签名 URL 的版本控制

Posted

技术标签:

【中文标题】在谷歌云存储中使用带有签名 URL 的版本控制【英文标题】:Using versioning with signed urls in google cloud storage 【发布时间】:2014-02-02 17:10:01 【问题描述】:

在对象上指定“世代”(版本号)时,我在为 Google Cloud Storage (GCS) 签署 GET 请求时遇到困难。在没有生成的情况下签署 URL 就像一个魅力,并且 GET 请求工作正常。但是,当我在路径前添加#generation 时,GCS 服务器在尝试获取签名 URL 时总是返回“拒绝访问”。

例如,签署此 URL 路径就可以正常工作:

https://storage.googleapis.com/BUCKET/OBJECT

签署此 URL 路径会拒绝我访问:

https://storage.googleapis.com/BUCKET/OBJECT#1360887697105000

请注意,为了简洁和隐私,我省略了带有 Signature、Expires、GoogleAccessId 参数的实际签名 URL。另请注意,我还使用 gsutil 验证了存储桶、对象和生成是正确的。

GCS 是否允许通过“世代”编号访问特定对象版本的签名 URL?访问特定版本时,URL 签名过程是否不同?

【问题讨论】:

看起来您使用的 URL 与 gsutil 兼容,但 XML API 要求您使用查询参数(看起来像 storage.googleapis.com/BUCKET/OBJECT?代=1360887697105000)。你能用这个语法确认它失败了吗?文档在这里供参考:developers.google.com/storage/docs/reference-headers#generation 行得通!非常感谢!!我不确定在哪里可以将其标记为已回答,但这完全解决了问题.. 最初使用评论以防存在与该问题相关的另一个潜在问题。我现在已将其添加为答案。 【参考方案1】:

您使用的 URL 与 gsutil 兼容,但 XML API 要求您使用查询参数表示生成(类似于 storage.googleapis.com/BUCKET/OBJECT?generation=1360887697105000)。

文档可供参考:developers.google.com/storage/docs/reference-headers#generation

【讨论】:

以上是关于在谷歌云存储中使用带有签名 URL 的版本控制的主要内容,如果未能解决你的问题,请参考以下文章

使用 ajax 通过签名的 url 将文件上传到谷歌云存储

如何在谷歌云构建中访问 git 标签?

如何在谷歌云构建上升级节点 js 版本

谷歌云存储传播

谷歌云点击部署hadoop

Bigquery 如何使用存储在谷歌云中的数据?