6

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

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

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

谢谢

4

3 回答 3

3

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

我希望这有帮助。干杯!

于 2013-06-03T14:21:48.917 回答
2

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

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

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

于 2014-03-15T20:21:07.213 回答
1

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

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

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

然后快速查看PutBlob 操作的 REST API 文档。注释中提到:

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

于 2013-03-08T08:11:30.413 回答