【问题标题】:Python Azure blob storage upload file bigger then 64 MBPython Azure blob 存储上传文件大于 64 MB
【发布时间】:2013-02-22 10:04:09
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: python azure azure-storage azure-blob-storage


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      如果你需要添加 Meta 信息,我在使用 Block List 方法时会做一个额外的 PUT 操作(带有 comp=metadata 前缀)。可能有一种更有效的方法来标记元信息而不需要额外的 PUT,但我不知道。

      【讨论】:

        【解决方案3】:

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

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

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

        然后快速查看PutBlob operation 的 REST API 文档。备注中提到:

        块 blob 的最大上传大小为 64 MB。如果你的 blob 是 大于 64 MB,您必须将其作为一组块上传。更多 信息,请参阅放置块 (REST API) 和放置块列表 (REST API) 操作。如果您上传 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 专家,无法进一步帮助您,但至少我可以很好地了解情况。

        【讨论】:

          猜你喜欢
          • 2015-06-16
          • 1970-01-01
          • 2016-08-18
          • 2021-06-20
          • 2017-01-24
          • 2017-08-19
          • 2019-12-01
          • 1970-01-01
          • 2021-10-13
          相关资源
          最近更新 更多