Using Swift REST API
To use Swift Rest API, you need at least 1 Swift user. To create a Swift user, please refer to Initializing Swift user. You can use this Swift user to create (or delete) multiple containers, where each container serves as a storage unit (similar to a folder). In each container, users can upload, get, and delete multiple corresponding objects (objects here are understood as files or subfolders within the container).
Basic process: Authentication -> Create Container -> Upload Object
Below is a list of Swift Rest APIs that we provide, along with instructions on how to operate with POSTMAN or CURL.
1. Get token
Input: username, password, projectId, authentication url
Method
POST
Header
Content-Type: application/json
Body
{ "auth": { "identity": { "methods": [ "password" ], "password": { "user": { "domain": { "name": "default" }, "name": "{username}", "password": "{password}" } } }, "scope": { "project": { "domain": { "name": "default" }, "id": "{projectId}" } } } }
Output:
Response trả về
"url: https://vos-ss-lab-hcm-sw.vinadata.vn/v1/AUTH_d6f0078021f4417989d6ba8ae4320dea" với public interface trong catalog có type "object-store", đây là link dùng cho những request sau này. Trong đó, " AUTH_d6f0078021f4417989d6ba8ae4320dea" tương ứng với một account trong object storage.
Header trả về
"x-subject-token: gAAAAABdAhsbpeT0CLQiUvTgX3TcVua8c7RLFIY074FlLvDWpGp06EV8SRCbuLGzSL5Q2AnfYogSWydNeZc5dWpRbTKxiwGXuP-wAoPPmIGvBctSkkwnhMF8UQXLBmwlIT43Mudc9ZuHgRLqlW1BT3OmhN9ugKTQHyzgCuzBmHqVgtXp6dRJYr0", đây là thông tin token dùng để xác thực cho những request sau.
Chú ý:
Token luôn có expired, nếu hết expired vui lòng get token mới
Get token dùng CURL thông qua RESTful API
curl -i -X POST -H 'Content-Type: application/json; charset=utf-8' <authentication_url>/v3/auth/tokens -d <auth_body>
curl -i -X POST "https://sw-auth-1.vinadata.vn/v3/auth/tokens" \
-H 'Content-Type: application/json; charset=utf-8' \
-d $'{
"auth": {
"scope": {
"project": {
"id": "6e89e27c18824e70b84a02487a93c69f",
"domain": {
"name": "default"
}
}
},
"identity": {
"methods": [
"password"
],
"password": {
"user": {
"name": "${username}",
"password": "${password},
"domain": {
"name": "default"
}
}
}
}
}
}'
2. Create a container
Method
PUT
Header
X-Auth-Token
Body
(Không bắt buộc)
In which :
+ Value của header "X-Auth-Token" chính là value của "x-subject-token" được lấy từ mục 3.1 (Get Token).
+ "container_name" là tên của container, bạn có thể đặt tùy ý. Tuy nhiên để tương thích với tất cả các client tools cũng như tránh các lỗi liên quan đến việc xử lý ký tự đặc biệt hoặc unicode thì tên container chỉ nên chứa các ký tự (a-z, A-Z) hoặc số (0-9). Tên container không nên chứa các ký tự đặc biệt như @, #, $, %, ^, &, *, ., /, \, {, }, [, ], |, ), ( …
Warning:
Some client tools may encounter errors if the container name contains special characters.
When working with containers (buckets) using the S3 protocol, the names of these containers must contain lowercase letters and numbers, without uppercase letters, special characters, or spaces.
If the request returns a status code of 201, you have successfully created a container (in the example above, the container is successfully created with the name 'container_name').
Within each container, you can upload multiple objects for storage (objects here could be, for example, images, any files, or folders).
Create a container using CURL through RESTful API
curl -i -X PUT -H "X-Auth-Token: <token>" <storage url>/mycontainer
curl -v -i -X PUT -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/new_container
3. Upload an object (object size < 5GB)
Method
PUT
Header
X-Auth-Token
Token được lấy từ "x-subject-token"
Content-Type
Chọn content-type phù hợp với object upload (Ví dụ: Content-Type: image/jpeg với file hình có định dạng jpg).
Body
Binary file: choose file
Ví dụ cụ thể:
Url
fileName.png là tên của object, object này sẽ được lưu trong container "nameContainer"
Method
PUT
Header
X-Auth-Token: gAAAAABdAhsbpeT0CLQiUvTgX3TcVua8c7RLFIY074FlLvDWpGp06EV8SRCbuLGzSL5Q2AnfYogSWydNeZc5dWpRbTKxiwGXuP-wAoPPmIGvBctSkkwnhMF8UQXLBmwlIT43Mudc9ZuHgRLqlW1BT3OmhN9ugKTQHyzgCuzBmHqVgtXp6dRJYr0
Content-Type: image/png
Với hình ảnh có định dạng file png tương ứng Content-Type: image/png
Body
Binary file: choose file
Ví dụ trong postman: chọn body binary, rồi chọn file tương ứng với máy tính local.
Upload an object using CURL through RESTful API
curl -i -T myobject -X PUT -H "X-Auth-Token: <token>" <storage url>/mycontainer/myobject
curl -v -i --data-binary 50GB -X PUT -H "Content-Type:application/octet-stream" -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/test_lifecycle/test.txt
4. Upload large object (object size > 5GB)
Method
POST
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "container" là tên container.
+ "name_object" tên của object muốn lấy nằm trong container.
Upload an object using CURL through RESTful API
Với các object có kích thước lớn (kích thước > 5GB) thì vStorage không hỗ trợ upload theo flow bình thường. Để có thể tải lên được những object này, cần phải thực hiện các bước sau:
Bước 1: Tạo segments container
vStorage dùng container segments để lưu trữ danh sách tất cả các segment objects của mỗi large object. Do đó, trước khi upload một large cần phải tạo container nếu nó chưa tồn tại, nếu nó đã tồn tại trước đó, không cần phải tạo lại thêm lần nữa.
Tên container này có pattern <container_segments>
Ví dụ: container bạn muốn lưu trữ large object có tên là: <mycontainer> thì segments container của nó sẽ có tên là <mycontainer_segments>.
Để tạo container, vui lòng tham chiếu đến mục <Create container>
Bước 2: Chia một large object thành những phần nhỏ hơn (segment a large object into segment objects)
Việc chia một large object thành những phần riêng biệt có thể dùng command line, client tool hoặc library.
Ví dụ: Upload object myobject (10 GB), segment object myobject này các segment objects:
00000001 (2GB)
00000002 (2GB)
00000003 (2GB)
00000004 (2GB)
00000005 (2GB)
Bước 3: Upload các phần này lên vStorage dùng RESTful API (uploads the segment objects using RESTful API)
Việc upload các segment objects như upload các small objects dùng Postman, CURL hay bất kỳ client tool, library nào hỗ trợ upload file thông qua HTTP. Sau khi upload từng segment object lên vStorage, response trả về sẽ gồm giá trị Etag, giá trị này được dùng tạo nội dung Json cho manifest.
Ví dụ: Upload các segment objects của Object myobject dùng CURL:
curl -X PUT -H 'X-Auth-Token: <token>'
http://<storage_url>/container/myobject/00000001 --data-binary '00000001'
=> ETAG: etagoftheobjectsegment1
curl -X PUT -H 'X-Auth-Token: <token>' http://<storage_url>/container/myobject/00000002 --data-binary '00000002'
=> ETAG: etagoftheobjectsegment2
curl -X PUT -H 'X-Auth-Token: <token>' http://<storage_url>/container/myobject/00000003 --data-binary '00000003'
=> ETAG: etagoftheobjectsegment3
curl -X PUT -H 'X-Auth-Token: <token>' http://<storage_url>/container/myobject/00000004 --data-binary '00000004'
=> ETAG: etagoftheobjectsegment4
curl -X PUT -H 'X-Auth-Token: <token>' http://<storage_url>/container/myobject/00000005 --data-binary '00000005'
=> ETAG: etagoftheobjectsegment5
Bước 4: Tạo nội dung Json cho manifest (build manifest content)
Nội dung của manifest là một chuỗi Json với các keys sau:
Key
Description
path
Đường dẫn lưu trữ của segment (the path to the segment object (not including account) /container/object_name)
etag
Giá trị checksum của segment object, được trả về sau khi upload thành công 1 segment object lên vStorage (the ETag given back when the segment object was PUT)
size_bytes
Kích thước của mỗi segment object với đơn vị bytes (the size of the complete segment object in bytes)
Ví dụ: Tạo nội dung Json cho manifest cho object myobject:
[{"path": "/container/myobject/00000001", "etag": "etagoftheobjectsegment1", "size_bytes": 2000000000}, {"path": /container/myobject/00000001", "etag": "etagoftheobjectsegment2", "size_bytes": 2000000000},{"path": /container/myobject/00000003", "etag": "etagoftheobjectsegment3", "size_bytes": 2000000000},{"path": /container/myobject/00000004", "etag": "etagoftheobjectsegment4", "size_bytes": 2000000000},{"path": /container/myobject/00000005", "etag": "etagoftheobjectsegment5", "size_bytes": 2000000000}]
Bước 5: Upload nội dung Json của manifest lên vStorage (upload the manifest content in Json form)
Việc upload nội dung manifest như upload bất kỳ một textjson content nào khác lên vStorage dùng Postman, CURL hay bất kỳ client tool, library.
curl -i -X PUT -H "X-Auth-Token: ${<token>}" ${<storage url>}/mybigfilescontainer/file?multipart-manifest=put -d '[{"path": "/container/myobject/00000001", "etag": "etagoftheobjectsegment1", "size_bytes": 2000000000}, {"path": /container/myobject/00000001", "etag": "etagoftheobjectsegment2", "size_bytes": 2000000000},{"path": /container/myobject/00000003", "etag": "etagoftheobjectsegment3", "size_bytes": 2000000000},{"path": /container/myobject/00000004", "etag": "etagoftheobjectsegment4", "size_bytes": 2000000000},{"path": /container/myobject/00000005", "etag": "etagoftheobjectsegment5", "size_bytes": 2000000000}]'
Ví dụ thực tế về upload một large object:
Upload một large object có kích thước là 10 GB với đường dẫn sau </home/hientt5/large_file/largefile> đến container <mybigfilecontainer>
Bước 1: Tạo segments container
curl -i -X PUT -H "x-auth-token: ${<token>}" ${<storage url>}/mybigfilescontainer_segments
Bước 2: Chia </home/hientt5/large_file/largefile> thành nhiều segment objects dùng command line split
split -b 40000 /home/hientt5/large_file/largefile
Lệnh split sẽ segment file </home/hientt5/large_file/largefile> thành những segment objects sau:
-rw-r--r-- 1 ron ron 100000000 apr 24 18:21 file
-rw-r--r-- 1 ron ron 40000000 apr 24 18:39 xaa
-rw-r--r-- 1 ron ron 40000000 apr 24 18:39 xab
-rw-r--r-- 1 ron ron 20000000 apr 24 18:39 xac
Bước 3: Upload những segment objects trên lên vStorage
curl -i -X PUT -H "x-auth-token: ${<token>}" ${<storage url>}/mybigfilescontainer_segments/xaa --data-binary @xaa
=> ETAG: 48e9a108a3ec623652e7988af2f88867
curl -i -X PUT -H "x-auth-token: ${<token>}" ${<storage url>}/mybigfilescontainer_segments/xab --data-binary @xab
=> ETAG: 48e9a108a3ec623652e7988af2f88867
curl -i -X PUT -H "x-auth-token: ${<token>}" ${<storage url>}/mybigfilescontainer_segments/xac --data-binary @xac
=> ETAG: 10e4462c9d0b08e7f0b304c4fbfeafa3
Bước 4: Tạo nội dung Json cho manifest
Tạo nội dung Json của manifest như sau:
[{"path":"/mybigfilescontainer_segments/xaa",
"etag":"48e9a108a3ec623652e7988af2f88867",
"size_bytes":4000000000},
{"path":"/mybigfilescontainer_segments/xab",
"etag":"48e9a108a3ec623652e7988af2f88867",
"size_bytes":4000000000},
{"path":"/mybigfilescontainer_segments/xac",
"etag":"10e4462c9d0b08e7f0b304c4fbfeafa3",
"size_bytes":2000000000}]
Bước 5: Upload nội dung Json của manifest lên vStorage
curl -i -X PUT -H "X-Auth-Token: ${<token>}" ${<storage url>}/mybigfilescontainer/file?multipart-manifest=put -d '[{"path":"/mybigfilescontainer_segments/xaa",
"etag":"48e9a108a3ec623652e7988af2f88867",
"size_bytes":4000000000},
{"path":"/mybigfilescontainer_segments/xab",
"etag":"48e9a108a3ec623652e7988af2f88867",
"size_bytes":4000000000},
{"path":"/mybigfilescontainer_segments/xac",
"etag":"10e4462c9d0b08e7f0b304c4fbfeafa3",
"size_bytes":2000000000}]'
Upload large object dùng Swift client tool
Việc upload một large object dùng Swift client tool rất đơn giản, về cơ bản, client tool này sẽ hỗ trợ tất cả các bước trên, người dùng chỉ cần truyền vào thông tin token để chứng thực, đường dẫn large object và kích thước của từng segment object.
Ví dụ: swift --os-auth-url https://api.example.com/v3 --auth-version 3\
--os-project-name project1 --os-project-domain-name domain1 \
--os-username user --os-user-domain-name domain1 \
--os-password password upload test_container -S 1073741824 large_file
5. Download an object
Method
Get
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "container" là tên container.
+ "name_object" tên của object muốn lấy nằm trong container.
Download an object using CURL through RESTful API
curl -i -X GET -H "X-Auth-Token: <token>" <storage url>/mycontainer/myobject
curl -v -i -X GET -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/test_lifecycle/test.txt
6. Download a large object
Method
Get
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "container" là tên container.
+ "name_object" tên của object muốn lấy nằm trong container.
Upload an object using CURL through RESTful API
curl -i -X GET -H "X-Auth-Token: <token>" <storage url>/mycontainer/myobject?multipart-manifest=get
curl -v -i -X GET -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
7. Delete a large object
Method
Delete
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "container" là tên container.
+ "name_object" tên của object muốn lấy nằm trong container.
Delete a large object using CURL through RESTful API
curl -i -X DELETE -H "X-Auth-Token: <token>" <storage url>/mycontainer/myobject?multipart-manifest=delete
curl -v -i -X GET -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
8. Delete an object
Method
Delete
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "container" là tên container.
+ "name_object" tên của object muốn xóa nằm trong container.
Delete an object using CURL through RESTful API
curl -i -X DELETE -H "X-Auth-Token: <token>" <storage url>/mycontainer/myobject
curl -v -i -X DELETE -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/test_lifecycle/test.txt
9. Copy an object
Method
COPY
Header
X-Auth-Token
Destination
{dest_container}/{name_object}
Body
(Optional)
Trong đó:
+ "container" là tên container.
+ "name_object" tên của object muốn copy nằm trong container.
+ “dest_container” tên của destination container
Copy an object using CURL through RESTful API
curl -i -X COPY -H "X-Auth-Token: <token>" -H "Destination: anothercontainer/myobject" <storage url>/mycontainer/myobject
curl -v -i -X COPY -H "Destination: lifecycle/test.txt" -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/test_lifecycle/test.txt
10. Delete a container
Method
Delete
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "container" là tên container cần được xóa.
Delete a container using CURL through RESTful API
curl -s -S -X DELETE -H "X-Auth-Token: <token>" <storage url>/mycontainer
curl -v -i -X DELETE -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/test_lifecycle
11. Rename an object
Method
COPY and DELETE
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "container" là tên container chứa đối tượng cần rename.
+ “name_object” là tên của đối tượng cần được rename.
Để rename một object, cần thực hiện hai bước sau:
+ Copy object đó với tên mới
+ Xóa object cũ
Rename an object using CURL through RESTful API
curl -i -X COPY -H "X-Auth-Token: <token>" -H "Destination: anothercontainer/new_myobject" <storage url>/mycontainer/myobject
curl -i -X DELETE -H "X-Auth-Token: <token>" <storage url>/mycontainer/myobject
curl -v -i -X COPY -H "Destination: lifecycle/new_test.txt" -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/test_lifecycle/test.txt
curl -v -i -X DELETE -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/test_lifecycle/test.txt
12. List all containers
Method
GET
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "account" là tên hoặc ID của account cần liệt kê danh sách containers.
List all container using CURL through RESTful API
curl -s -S -X GET -H "X-Auth-Token: <token>" <storage url>
curl -v -i -X GET -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399
13. List content of a container
Method
GET
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "account" là tên hoặc ID của account cần liệt kê danh sách containers.
+ "container" là tên của container cần liệt kê nội dung.
List contents of a container using CURL through RESTful API
curl -s -S -X GET -H "X-Auth-Token: <token>" <storage url>/mycontainer
curl -v -i -X GET -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/test_lifecycle
14. Get tempURL of an object
Method
GET
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "account" là tên hoặc ID của account cần liệt kê danh sách containers.
+ "container" là tên của container cần liệt kê nội dung.
+ “name_object” là tên đối tượng cần tạo tempurl.
Để tạo một tempurl của một object, cần thực hiện các bước sau:
+ Lấy về secret key của container chứa object đó.
+ Tạo tempurl dựa trên secret key đó.
Get secret key từ giá trị của field _X-Account-Meta-Temp-URL-Key_** của meta-data của container dùng CURL thông qua RESTful API**
curl -s -S -X GET -H "X-Auth-Token: <token>" <storage url>/mycontainer
curl -v -i -X GET -H "X-Auth-Token: gAAAAABdQQ8uIM6CWmA85hKi6MtOvuGP1qok8OJzp0-h74QAn9ptncjT16sg0pxxilUSCPgFeb9NKpNfmkD9kDLYRAPkymOB9wlNWNTkiz20m2uZpCeTIDUpPMO110rSXBMaE8Gszq9BLiKFyuHVmTEKeyoQ3qEFxitXilEwIg201IRtbJFiCa0" \
https://<vStorage endpoint>/v1/AUTH_a5bf65ca71594d85a60dc73cf9fc8399/test_lifecycle
Get tempurl use script sau
#!/bin/bash
seconds=<number of seconds until url expires>
method=GET
expires=$(( $(date '+%s') + $seconds ))
path='<container>/<object>'
fullpath=`echo $OS_STORAGE_URL | sed 's/http.*\/v1/\/v1/'`"/"$path
key=${secret_key}
sig=`printf '%s\n%s\n%s' $method $expires $fullpath | openssl sha1 -hmac $key | awk '{print $2}'`
# print the URL
echo "${OS_STORAGE_URL}/${path}?temp_url_sig=${sig}&temp_url_expires=$
{expires}"
15. Create a folder
Method
PUT
Header
X-Auth-Token
Body
(Optional)
Trong đó:
+ "account" là tên hoặc ID của account cần liệt kê danh sách containers.
+ "container" là tên của container cần liệt kê nội dung.
+ “new_folder” là tên của thư mục mới cần tạo.
Create a folder using CURL through RESTful API
curl -s -S -X PUT -H "X-Auth-Token: <token>" -H “Content-Length: 0” -H “Content-Type: application/directory” <storage url>/mycontainer/newfolder
curl -X PUT -i https://<vStorage endpoint>/v1/AUTH_f0a1d142185e4f8dae22ae67764d099b/syncdata1/newfolder/ -H "Content-Length:0" -H "Content-Type:application/directory" -H "X-Auth-Token: gAAAAABfKhbKq-9EVUhbSjPMJEMiPh7yJ0fXCZ33__J1dIQJaN58UPWKg96mAx9VGp3X7H-LyJhT0S5bN4dqKOCPERRQ8zw2Mo0zVRxlOG861vEWGKR1vkMbykAWTETa8cMnrXK6W2LYXkCpefJw75Q62UDIt1dmjT7WidpnICowW26FKp7B9WM"
Last updated