伪分层文件夹和目录

虽然您无法在 OpenStack 对象存储中嵌套目录,但可以通过在对象名称中添加正斜杠字符 (/) 在单个容器内模拟分层结构。要导航伪目录结构,可以使用 delimiter 查询参数。本示例演示如何使用伪分层文件夹和目录。

注意

在本示例中,对象位于名为 backups 的容器中。在该容器内,对象组织在一个名为 photos 的伪目录中。容器名称在示例中未显示,但它是对象 URL 的一部分。例如,图片 me.jpg 的 URL 是 https://swift.example.com/v1/CF_xer7_343/backups/photos/me.jpg

列出伪分层文件夹请求:HTTP

要显示存储容器中的所有对象列表,请使用 GET,不带 delimiterprefix

$ 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>

使用 prefixdelimiter 参数查看伪目录内的对象,包括进一步嵌套的伪目录。

$ 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