对于Google云端存储,路径部分应该编码还是不编码?
Encoding URI path parts说它们应该被编码,但是Object names讨论了以看似分层的方式命名GCS对象的可能性......
因此,如果我将对象命名为abc/xyz
,那么我的对象https://www.googleapis.com/storage/v1/b/example-bucket/o/abc%2fxyz
或https://www.googleapis.com/storage/v1/b/example-bucket/o/abc/xyz
的路径是什么?
这是什么!?有人请帮我解决这个困惑。
答案 0 :(得分:1)
您可以在处理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的描述。
我有点惊讶的是,API的默认行为是返回有关存储桶中对象的元数据。要获得实际内容,我必须附加'?alt = media',如this section末尾所述:
默认情况下,它会响应响应中的对象资源 身体。如果您提供URL参数alt = media,那么它将响应 使用响应正文中的对象数据。