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

Alv*_*vin 6 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')
Run Code Online (Sandbox Code Playgroud)

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

谢谢

ast*_*kov 1

这是个好问题。不幸的是,我没有看到上传任意大文件的真正实现。因此,从我看来,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 专家,无法为您提供进一步帮助,但至少我可以让您很好地了解情况。