如何使用swift API在swift对象库中上传目录结构

时间:2016-04-21 10:36:43

标签: apache ibm-cloud openstack-swift object-storage

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

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

由于 的Manoj

2 个答案:

答案 0 :(得分: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

显然,如果在下载过程中您想在本地重新创建文件夹层次结构,那么您可以这样做。

答案 1 :(得分:0)

API本身的设计不能支持按目录上传,因为API纯粹是如何与服务通信的合同;它本身不具有对本地目录结构的可见性。各个工具都可以,因此实际上可以为同一个Swift CLI工具提供目录名称:

lapply(1:1, function (x) {
        tmp <- meuse@data[, x]
        emp.svgm <- automap::autofitVariogram(tmp ~ 1, meuse)
})

另一种API端解决方案是Swift API中的批量上传API。我们在SoftLayer和Bluemix对​​象存储服务中都启用了它。如果您能够将文件的tar / tar.gz / tar.bz2存档上传到API,则可以指示API在上传完成后自动将其解压缩到您的帐户或容器中。

以下是如何使用此API的示例:

swift upload mycontainer mylocaldir

为了在从归档文件中提取的对象中包含前缀,您可以将上面的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 段。这将丢弃存档中的任何顶级文件,因此在创建存档时请确保所有文件都在文件夹中。但是你最终会得到一个这样的URL:

container

请注意,支持的存档格式为tar,tar.gz和tar.bz2。

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