2016-04-21 5 views
0

Я использую хранилище быстрых объектов на Bluemix для сохранения некоторых моих мультимедийных изображений. Я заметил, что инструмент SWIFT CLI имеет параметр --prefix для загрузки каталога в хранилище объектов. Я понимаю, что хранилище объектов не имеет своей структуры каталогов, но оно сохраняет иерархию, префикс структуры папки с именем файла. CLI позволяет загружать папку, используя опцию --prefix, и при загрузке создает необходимую структуру каталогов.Как загрузить структуру каталога в хранилище быстрых объектов с помощью быстрого API

Я ищу аналогичную функциональность, полученную с помощью REST API. В документации API я не вижу способа предоставить информацию о папке. Кто-нибудь знает, как добиться такого же поведения с помощью API?

Благодаря Манодж

ответ

1

Если предположить, что контейнер для хранения объекта доступен на https://host/AUTH_projectId/mycontainer, вы можете поместить файл в https://host/v1/AUTH_projectId/mycontainer/afolder/asubfolder/myfile.txt создать иерархию, которую вы ищете:

curl -i https://host/v1/AUTH_projectId/mycontainer/afolder/asubfolder/myfile.txt -X PUT -H "Content-Length: 15" -H "Content-Type: " -H "X-Auth-Token: yourtoken" 

Обратитесь к этому OpenStack API: http://developer.openstack.org/api-ref-objectstorage-v1.html#createOrReplaceObject

Очевидно, что если во время загрузки вы хотите локально создать иерархию папок, это зависит от вас.

+0

Обратите внимание, что мы могли бы использовать локон --upload-файл, чтобы выбрать локальный файл для загрузки. – Fred

0

API сам по дизайну не может поддерживать загрузку по каталогу, поскольку API - это просто договор о том, как разговаривать с сервисом; сам по себе он не имеет видимости в вашей локальной структуре каталогов. Отдельные инструменты, так что на самом деле можно поставить имя каталога для той же инструмента Swift CLI:

swift upload mycontainer mylocaldir 

Альтернативой API стороны решения является массовой загрузкой API в API Свифта. Мы включаем это как в службы хранения объектов SoftLayer, так и Bluemix. Если вы можете загружать архив файлов tar/tar.gz/tar.bz2 в API, вы можете поручить API автоматически извлекать его в свою учетную запись или контейнер после завершения загрузки.

Вот пример того, как использовать этот API:

curl -i -X PUT -T stuff.tar.gz https://example.com/v1/AUTH_abc/container?extract-archive=tar.gz -H X-Auth-Token:mytoken 

Для того, чтобы включить префикс на объекты, которые извлекаются из файлов в архиве, вы можете продлить container немного выше, чтобы включить container/my/prefix. Например:

https://example.com/v1/AUTH_account/container/my/prefix?extract-archive=tar.gz 

Если вы хотите для архива должен быть извлечен таким образом, чтобы папки верхнего уровня в архиве стали контейнерами, вы бы опустить container сегмент в целом. Это отбросит любые файлы верхнего уровня в архиве, поэтому убедитесь, что все файлы находятся в папках при создании архива. Но вы бы в конечном итоге с URL-то вроде этого:

https://example.com/v1/AUTH_account/?extract-archive=tar.gz 

Обратите внимание, что архивные форматы, поддерживаемые являются деготь, tar.gz и tar.bz2.

Более подробную информацию можно получить в документации OpenStack Swift: http://docs.openstack.org/developer/swift/middleware.html#extract-archive