summaryrefslogtreecommitdiff
path: root/doc/source/api/pseudo-hierarchical-folders-directories.rst
blob: c7e764f2db468835f8147fe7fb2c53279c0cdb08 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
===========================================
Pseudo-hierarchical folders and directories
===========================================

Although you cannot nest directories in OpenStack Object Storage, you
can simulate a hierarchical structure within a single container by
adding forward slash characters (``/``) in the object name. To navigate
the pseudo-directory structure, you can use the ``delimiter`` query
parameter. This example shows you how to use pseudo-hierarchical folders
and directories.

.. note::

   In this example, the objects reside in a container called ``backups``.
   Within that container, the objects are organized in a pseudo-directory
   called ``photos``. The container name is not displayed in the example,
   but it is a part of the object URLs. For instance, the URL of the
   picture ``me.jpg`` is
   ``https://swift.example.com/v1/CF_xer7_343/backups/photos/me.jpg``.

List pseudo-hierarchical folders request: HTTP
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

To display a list of all the objects in the storage container, use
``GET`` without a ``delimiter`` or ``prefix``.

.. code-block:: console

   $ curl -X GET -i -H "X-Auth-Token: $token" \
    $publicurl/v1/AccountString/backups

The system returns status code 2xx (between 200 and 299, inclusive) and
the requested list of the objects.

.. code-block:: console

   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

Use the delimiter parameter to limit the displayed results. To use
``delimiter`` with pseudo-directories, you must use the parameter slash
(``/``).

.. code-block:: console

   $ curl -X GET -i -H "X-Auth-Token: $token" \
    $publicurl/v1/AccountString/backups?delimiter=/

The system returns status code 2xx (between 200 and 299, inclusive) and
the requested matching objects. Because you use the slash, only the
pseudo-directory ``photos/`` displays. The returned values from a slash
``delimiter`` query are not real objects. The value will refer to
a real object if it does not end with a slash. The pseudo-directories
have no content-type, rather, each pseudo-directory has
its own ``subdir`` entry in the response of JSON and XML results.
For example:

.. code-block:: JSON

   [
     {
       "subdir": "photos/"
     }
   ]

.. code-block:: XML

   <?xml version="1.0" encoding="UTF-8"?>
   <container name="backups">
     <subdir name="photos/">
       <name>photos/</name>
     </subdir>
   </container>

Use the ``prefix`` and ``delimiter`` parameters to view the objects
inside a pseudo-directory, including further nested pseudo-directories.

.. code-block:: console

   $ curl -X GET -i -H "X-Auth-Token: $token" \
    $publicurl/v1/AccountString/backups?prefix=photos/&delimiter=/

The system returns status code 2xx (between 200 and 299, inclusive) and
the objects and pseudo-directories within the top level
pseudo-directory.

.. code-block:: console

   photos/animals/
   photos/me.jpg
   photos/plants/

.. code-block:: JSON

   [
     {
       "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/"
     }
   ]

.. code-block:: XML

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

You can create an unlimited number of nested pseudo-directories. To
navigate through them, use a longer ``prefix`` parameter coupled with
the ``delimiter`` parameter. In this sample output, there is a
pseudo-directory called ``dogs`` within the pseudo-directory
``animals``. To navigate directly to the files contained within
``dogs``, enter the following command:

.. code-block:: console

   $ curl -X GET -i -H "X-Auth-Token: $token" \
    $publicurl/v1/AccountString/backups?prefix=photos/animals/dogs/&delimiter=/

The system returns status code 2xx (between 200 and 299, inclusive) and
the objects and pseudo-directories within the nested pseudo-directory.

.. code-block:: console

   photos/animals/dogs/corgi.jpg
   photos/animals/dogs/poodle.jpg
   photos/animals/dogs/terrier.jpg