伪分层文件夹和目录¶
虽然您无法在 OpenStack 对象存储中嵌套目录,但可以通过在对象名称中添加正斜杠字符 (/) 在单个容器内模拟分层结构。要导航伪目录结构,可以使用 delimiter 查询参数。本示例演示如何使用伪分层文件夹和目录。
注意
在本示例中,对象位于名为 backups 的容器中。在该容器内,对象组织在一个名为 photos 的伪目录中。容器名称在示例中未显示,但它是对象 URL 的一部分。例如,图片 me.jpg 的 URL 是 https://swift.example.com/v1/CF_xer7_343/backups/photos/me.jpg。
列出伪分层文件夹请求:HTTP¶
要显示存储容器中的所有对象列表,请使用 GET,不带 delimiter 或 prefix。
$ curl -X GET -i -H "X-Auth-Token: $token" \
$publicurl/v1/AccountString/backups
系统返回状态码 2xx(介于 200 和 299 之间,包括 200 和 299)以及请求的对象列表。
photos/animals/cats/persian.jpg
photos/animals/cats/siamese.jpg
photos/animals/dogs/corgi.jpg
photos/animals/dogs/poodle.jpg
photos/animals/dogs/terrier.jpg
photos/me.jpg
photos/plants/fern.jpg
photos/plants/rose.jpg
使用 delimiter 参数可以限制显示的結果。要将 delimiter 与伪目录一起使用,必须使用参数斜杠 (/)。
$ curl -X GET -i -H "X-Auth-Token: $token" \
$publicurl/v1/AccountString/backups?delimiter=/
系统返回状态码 2xx(介于 200 和 299 之间,包括 200 和 299)以及请求的匹配对象。由于您使用了斜杠,因此仅显示伪目录 photos/。从斜杠 delimiter 查询返回的值不是真实对象。如果值不以斜杠结尾,则该值将引用真实对象。伪目录没有 content-type,而是每个伪目录在 JSON 和 XML 结果的响应中都有其自己的 subdir 条目。例如
[
{
"subdir": "photos/"
}
]
<?xml version="1.0" encoding="UTF-8"?>
<container name="backups">
<subdir name="photos/">
<name>photos/</name>
</subdir>
</container>
使用 prefix 和 delimiter 参数查看伪目录内的对象,包括进一步嵌套的伪目录。
$ curl -X GET -i -H "X-Auth-Token: $token" \
$publicurl/v1/AccountString/backups?prefix=photos/&delimiter=/
系统返回状态码 2xx(介于 200 和 299 之间,包括 200 和 299)以及顶级伪目录内的对象和伪目录。
photos/animals/
photos/me.jpg
photos/plants/
[
{
"subdir": "photos/animals/"
},
{
"hash": "b249a153f8f38b51e92916bbc6ea57ad",
"last_modified": "2015-12-03T17:31:28.187370",
"bytes": 2906,
"name": "photos/me.jpg",
"content_type": "image/jpeg"
},
{
"subdir": "photos/plants/"
}
]
<?xml version="1.0" encoding="UTF-8"?>
<container name="backups">
<subdir name="photos/animals/">
<name>photos/animals/</name>
</subdir>
<object>
<name>photos/me.jpg</name>
<hash>b249a153f8f38b51e92916bbc6ea57ad</hash>
<bytes>2906</bytes>
<content_type>image/jpeg</content_type>
<last_modified>2015-12-03T17:31:28.187370</last_modified>
</object>
<subdir name="photos/plants/">
<name>photos/plants/</name>
</subdir>
</container>
您可以创建无限数量的嵌套伪目录。要浏览它们,请使用更长的 prefix 参数与 delimiter 参数结合使用。在本示例输出中,有一个名为 dogs 的伪目录位于 animals 伪目录中。要直接导航到 dogs 包含的文件,请输入以下命令
$ curl -X GET -i -H "X-Auth-Token: $token" \
$publicurl/v1/AccountString/backups?prefix=photos/animals/dogs/&delimiter=/
系统返回状态码 2xx(介于 200 和 299 之间,包括 200 和 299)以及嵌套伪目录内的对象和伪目录。
photos/animals/dogs/corgi.jpg
photos/animals/dogs/poodle.jpg
photos/animals/dogs/terrier.jpg