Python Azure blob存储上传文件大于64 MB

时间:2013-03-07 09:20:05

标签: python azure azure-storage azure-storage-blobs

从示例代码中,我可以上传64MB,没有任何问题:

   myblob = open(r'task1.txt', 'r').read()
   blob_service.put_blob('mycontainer', 'myblob', myblob, x_ms_blob_type='BlockBlob')

如果我想上传更大尺寸怎么办?

谢谢

3 个答案:

答案 0 :(得分:3)

我几天前遇到了同样的问题,很幸运能找到this。它将文件分成块并上传给你。

我希望这会有所帮助。干杯!

答案 1 :(得分:2)

我不是Python程序员。但是我可以提供一些额外的提示(我的所​​有内容都在C中):

对文件所需的块(每个4MB)使用HTTP PUT操作(comp =块选项),然后使用合并块的最终PUT块列表(comp = blocklist选项)。如果您的阻止上传失败或您需要中止,则删除先前上传的部分阻止组的清除是您要创建的文件的DELETE命令,但这仅显示在2013-08-15版本中(某人)从Azure支持应该确认这一点)。

如果您需要添加元信息,则在使用阻止列表方法时,我会执行额外的PUT操作(使用comp =元数据前缀)。可能有一种更有效的方式来标记元信息而无需额外的PUT,但我不知道它。

答案 2 :(得分:1)

这是个好问题。不幸的是,我没有看到上传任意大文件的真实实现。所以,从我看到的Python SDK还有很多工作要做,除非我遗漏了一些非常重要的东西。

文档中提供的示例代码确实只使用一个文本文件并立即上传。目前还没有实现的代码(我在SDK Source code中看到的)支持上传更大的文件。

因此,对于您来说,要使用Python中的Blob,您需要了解Azure Blob存储的工作原理。 Start here

然后快速浏览PutBlob operation的REST API文档。在备注中提到:

  

块blob的最大上载大小为64 MB。如果你的blob是   如果大于64 MB,则必须将其作为一组块上载。更多   信息,请参阅Put Block(REST API)和Put Block List(REST   API)操作。如果您上传了,则无需调用Put Blob   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的专家,可以帮助你进一步,但至少我给你一个很好的情况。