Google cloud storage 在地面军事系统中编码或不编码路径部件?

Google cloud storage 在地面军事系统中编码或不编码路径部件?,google-cloud-storage,Google Cloud Storage,对于谷歌云存储,路径部分应该编码还是不编码 说它们应该被编码,但讨论了以一种似乎分层的方式命名地面军事系统对象的可能性 因此,如果我将一个对象命名为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 是哪一个!?谁来帮我解决这个困惑。TL;博士

对于谷歌云存储,路径部分应该编码还是不编码

说它们应该被编码,但讨论了以一种似乎分层的方式命名地面军事系统对象的可能性

因此,如果我将一个对象命名为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

是哪一个!?谁来帮我解决这个困惑。

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


让我们假装文件夹是真实的 是的,您需要对对象名称进行编码。有一个有用的描述,我在下面部分引用(我的重点)以供参考:

对象名驻留在bucket中的一个平面命名空间中,[…]表示 对象不驻留在bucket中的子目录中。对于 例如,您可以命名一个对象 /欧洲/法国/巴黎.jpg 为了使paris.jpg看起来位于子目录/europe/france中,但对于云存储,对象只是存在于bucket中,并且具有 name/europe/france/paris.jpg


因此没有子目录,但适当的命名和知识丰富的UI或API的使用将使其看起来像是存在某种层次结构。

所有GCS客户端库都知道如何正确编码名称,但如果您在它们上运行raw GET(通过适当的身份验证),则必须自己进行编码。相关章节是我在此引用的最相关部分:

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

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

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


元数据v使用GCS JSON API的内容 API的默认行为是返回有关bucket中对象的元数据,这让我有点惊讶。要获取实际内容,我必须附加“?alt=media”,如结尾所述:

默认情况下,这将在响应中使用对象资源进行响应 身体。如果您提供URL参数alt=media,则它将响应 在响应主体中使用对象数据


在过去的几天里,我一直在努力解决同样的问题。在我的例子中,对象是嵌套的,通过客户端库一切都可以正常工作,但是通过curl运行无论是否编码都会失败。