我无法在 PHP 或 Guzzle 的上下文中真正回答这个问题,但我可以提供一些有关 Cloud Files 的信息和一些可能有帮助的命令行 curl 示例。
Rackspace Cloud Files 在容器内并没有真正的“文件夹”概念。您有一个包含以下部分的 URL:https://{storage_endpoint}/{account_name}/{container_name}/{object_name}
但是,您可以通过创建名称中带有“/”字符的对象来模拟文件夹。然后在执行容器列表时,您可以设置“prefix”和“delimiter”查询字符串参数来模拟类似文件夹的行为。
例如,假设您列出了您的容器以查看所有对象:
$ curl -i -XGET -H"x-auth-token: $AUTH_TOKEN" https://storage101.iad3.clouddrive.com/v1/$ACCOUNT_NAME/$CONTAINER_NAME
HTTP/1.1 200 OK
...
Date: Thu, 01 Dec 2016 02:16:53 GMT
foo/file1.txt
foo/bar/file2.txt
baz/file3.txt
baz/file4.txt
这里我们有四个对象,分别命名为“foo/file1.txt”、“foo/bar/file2.txt”、“baz/file3.txt”和“baz/file4.txt”。
测试文件夹“foo”是否存在的最简单方法是将前缀设置为“foo/”,将分隔符设置为“/”,如下所示:
$ curl -i -XGET -H"x-auth-token: $AUTH_TOKEN" https://storage101.iad3.clouddrive.com/v1/$ACCOUNT_NAME/$CONTAINER_NAME?prefix=foo/&delimiter=/
HTTP/1.1 200 OK
...
Date: Thu, 01 Dec 2016 02:16:45 GMT
foo/file1.txt
foo/bar/file2.txt
如您所见,如果存在带有该前缀的任何对象,则返回 HTTP 200 以及与该前缀匹配的对象列表。如果不存在具有该前缀的对象,则“文件夹”不存在并且将返回 HTTP 204。
如果您现在想测试“foo”中的“子文件夹”,您可以执行另一个容器列表,将前缀更改为“foo/bar/”并保留“/”的分隔符。
此外,如果你想创建一个文件夹“images”并让它包含“cat.jpg”,你不需要先创建一个文件夹,你只需创建一个名为“images/cat.jpg”的包含数据的对象对于 cat.jpg。
您可以在此处找到有关 Rackspace 云文件和 Pseudo-Hierarchical 文件夹的更多信息:
https ://developer.rackspace.com/docs/cloud-files/v1/general-api-info/pseudo-hierarchical-folders-and-directories/