繁体   English   中英

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

[英]Python Azure blob storage upload file bigger then 64 MB

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

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

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

谢谢

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

我希望这有帮助。 干杯!

我不是Python程序员。 但是我可以提供一些额外的提示(我的东西都在C中):

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

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

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

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

因此,对于您来说,要使用Python中的Blob,您需要了解Azure Blob存储的工作原理。 从这里开始

然后快速浏览一下PutBlob操作的REST API文档。 备注中提到:

块blob的最大上载大小为64 MB。 如果blob大于64 MB,则必须将其作为一组块上载。 有关更多信息,请参阅Put Block(REST API)和Put Block List(REST API)操作。 如果将blob作为一组块上传,则无需调用Put Blob。

好消息是PutBlock和PutBlockList是在Python SDK中实现的,但没有提供如何使用它的示例。 您需要做的是手动将文件拆分为最多4 MB的块(块)。 然后使用put_block(self, container_name, blob_name, block, blockid, content_md5=None, x_ms_lease_id=None):来自python SDK的函数来上传块。 最终,您将并行上传块。 但是不要忘记你还必须执行put_block_list(self, container_name, blob_name, block_list, content_md5=None, x_ms_blob_cache_control=None...最后提交所有上传的块。

不幸的是,我不是Python的专家,可以帮助你进一步,但至少我给你一个很好的情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM