我在Bluemix上使用swift对象存储来保存我的一些多媒体图像。我注意到SWIFT CLI工具有一个选项--prefix,用于将目录上传到对象库。据我所知,Object store没有其目录结构,但它通过在文件夹结构前加上文件名前缀来保持层次结构。 CLI允许使用--prefix选项下载文件夹,并在下载时创建所需的目录结构。
我正在寻找使用REST API实现的类似功能。在API文档中,我没有看到任何提供有关文件夹的信息的方法。有谁知道如何使用API实现相同的行为?
由于 的Manoj
答案 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