要编码或不编码GCS中的路径部分?

时间:2017-06-01 12:59:06

标签: google-cloud-storage

对于Google云端存储,路径部分应该编码还是不编码?

Encoding URI path parts说它们应该被编码,但是Object names讨论了以看似分层的方式命名GCS对象的可能性......

因此,如果我将对象命名为abc/xyz,那么我的对象https://www.googleapis.com/storage/v1/b/example-bucket/o/abc%2fxyzhttps://www.googleapis.com/storage/v1/b/example-bucket/o/abc/xyz的路径是什么?

这是什么!?有人请帮我解决这个困惑。

1 个答案:

答案 0 :(得分:1)

TL; DR

您可以在处理GCS客户端库时使用嵌套文件夹,但是向URL本身发送GET请求将需要您了解如何正确映射文件夹名称。


让我们假装文件夹是真实的

是的,您需要对对象名称进行编码。有一个有用的描述here我在下面部分引用(我的重点)作为参考:

  

对象名称位于存储桶中的平面命名空间中,[...]表示   存储桶中的对象不在子目录中。对于   例如,您可以命名一个对象    /europe/france/paris.jpg   为了使paris.jpg看起来位于子目录/ europe / france中,但是对于云存储,该对象只存在于存储桶中且具有   姓名/europe/france/paris.jpg。


因此,没有子目录,但适当的命名和使用知识渊博的UI或API会使其看起来好像有一些层次结构。

所有GCS客户端库都知道正确编码名称,但如果您正在运行原始GET(通过适当的身份验证),则必须自己执行此操作。相关部分为here,我在此引用最相关的部分:

  

例如,如果您发送名为foo /?bar的对象的GET请求   在存储桶示例桶中,您的请求URI应为:

     

GET https://www.googleapis.com/storage/v1/b/example-bucket/o/foo%2f%3fbar

因此,您可以看到对象名称部分已使用%2f编码为斜杠(/)字符。有一个更完整的命名约定here的描述。


使用GCS JSON API

的元数据v内容

我有点惊讶的是,API的默认行为是返回有关存储桶中对象的元数据。要获得实际内容,我必须附加'?alt = media',如this section末尾所述:

  

默认情况下,它会响应响应中的对象资源   身体。如果您提供URL参数alt = media,那么它将响应   使用响应正文中的对象数据。