2013-03-07 48 views

回答

1

這是個好問題。不幸的是,我沒有看到真正的上傳任意大文件的實現。因此,從我所看到的情況來看,除非我錯過了一些非常重要的東西,否則Python SDK上還有很多工作要做。

文檔中提供的示例代碼確實只使用一個文本文件並立即上載。沒有真正的代碼尚未實現(從我在SDK Source code中看到的內容)來支持上載較大的文件。

因此,對於您來說,要使用Python中的Blob,您需要了解Azure Blob存儲的工作原理。 Start here

然後快速查看PutBlob operation的REST API文檔。它在備註中提到:

塊blob的最大上載大小爲64 MB。如果您的blob是 大於64 MB,則必須將其上載爲一組塊。有關更多 的信息,請參閱Put塊(REST API)和Put Block List(REST API)操作。如果您將 blob作爲一組塊來上傳,則不必調用Put Blob。

好消息是PutBlock和PutBlockList是在Python SDK中實現的,但沒有提供如何使用它的示例。你必須做的是手動將文件分割爲最多4 MB的塊(塊)。然後使用python SDK中的put_block(self, container_name, blob_name, block, blockid, content_md5=None, x_ms_lease_id=None):函數來上傳這些塊。最終,您將並行上傳塊。不過不要忘記,最後還必須執行put_block_list(self, container_name, blob_name, block_list, content_md5=None, x_ms_blob_cache_control=None...以提交上傳的所有塊。

不幸的是,我不是Python專家來幫助你進一步,但至少我能給你一個很好的情況。

3

幾天前我遇到了同樣的問題,幸運地找到this。它將文件分解成塊並上傳給你。

我希望這會有所幫助。乾杯!

2

我不是Python程序員。但我可以提供一些額外的提示(我的東西全部用C語言編寫):

使用HTTP PUT操作(comp = block選項)獲取文件所需的儘可能多的塊(每個4MB),然後使用final PUT塊列表(comp = blocklist選項),用於合併塊。如果您的數據塊上傳失敗或您需要中止,則用於刪除以前上傳的部分數據塊的清除操作對於您正在創建的文件而言是一個DELETE命令,但這似乎僅受2013-08-15版本支持(某人從Azure的支持應該確認這一點)。

如果您需要添加元信息,則使用Block List方法時會執行額外的PUT操作(帶有comp =元數據前綴)。可能有一種更有效的方式來標記元信息而不需要額外的PUT,但我並不知道它。