2016-04-21 66 views
0

我在Bluemix上使用swift對象存儲來保存一些多媒體圖像。我注意到SWIFT CLI工具有一個選項--prefix來將目錄上傳到對象存儲。我知道Object store沒有它的目錄結構,但它通過在文件夾結構前加上文件名來保持層次結構。 CLI允許使用--prefix選項下載文件夾,並在下載時創建所需的目錄結構。如何使用swift API在swift對象存儲中上傳目錄結構

我正在尋找使用REST API實現的類似功能。在API文檔中,我沒有看到提供有關文件夾信息的任何方式。有誰知道如何使用API​​實現相同的行爲?

感謝 馬諾

回答

1

假設你的對象存儲容器是https://host/AUTH_projectId/mycontainer訪問,則可以在https://host/v1/AUTH_projectId/mycontainer/afolder/asubfolder/myfile.txt PUT一個文件來創建你正在尋找的層次:

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純粹是如何與服務對話的合同;它本身並不具備對本地目錄結構的可見性。個人意志的工具,所以它實際上可能提供一個目錄名相同的斯威夫特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的斯威夫特文檔中可用: http://docs.openstack.org/developer/swift/middleware.html#extract-archive

相關問題