从示例代码中,我可以上传64MB,没有任何问题:
myblob = open(r'task1.txt', 'r').read()
blob_service.put_blob('mycontainer', 'myblob', myblob, x_ms_blob_type='BlockBlob')
如果我想上传更大尺寸怎么办?
谢谢
答案 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的专家,可以帮助你进一步,但至少我给你一个很好的情况。