0

我在 Bluemix 上使用 swift 对象存储来保存我的一些多媒体图像。我注意到 SWIFT CLI 工具有一个选项 --prefix 可以将目录上传到对象存储。我知道对象存储没有其目录结构,但它通过在文件夹结构前加上文件名来保持层次结构。CLI 允许使用 --prefix 选项下载文件夹,并在下载时创建所需的目录结构。

我正在寻找通过使用 REST API 实现的类似功能。在 API 文档中,我看不到任何提供有关文件夹信息的方式。有谁知道如何使用 API 实现相同的行为?

谢谢马诺伊

4

2 回答 2

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

显然,如果在下载过程中您想在本地重新创建文件夹层次结构,这取决于您。

于 2016-04-21T12:08:13.063 回答
0

API 本身在设计上不支持按目录上传,因为 API 纯粹是如何与服务对话的合同;就其本身而言,它无法查看您的本地目录结构。个别工具会,因此实际上可以为同一个 Swift CLI 工具提供目录名称:

swift upload mycontainer mylocaldir

另一种 API 端解决方案是 Swift API 中的批量上传 API。我们在 SoftLayer 和 Bluemix Object Storage 服务中都启用了此功能。如果您能够将文件的 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、tar.gz 和 tar.bz2。

OpenStack Swift 文档中提供了更多详细信息:http: //docs.openstack.org/developer/swift/middleware.html#extract-archive

于 2016-06-28T15:01:18.503 回答