首页 > 解决方案 > 我想在块中使用 python 将文件上传到 azure blob。(使用-put_block)

问题描述

我正在使用 python 将文件上传到 azure blob。我想使用 put_block 做同样的事情,将文件分成小部分,然后上传它们然后组合。这样在大文件的情况下,它不会失败。有人可以帮我弄这个吗?我在 StackOverflow 上尝试了多种解决方案。没有任何工作

from  azure.storage.blob import BlockBlobService

def uploadFile():
    accountey="account-key"
    accountName="account-name"
    containerName="container-name"

    blobService =BlockBlobService(account_name=accountName, account_key=accountey )
    blobService.create_container(containerName)
    blobService.create_blob_from_path(containerName, "image1.jpg", "./images/python.jpg")

uploadFile()

我试过这个也不起作用:

def upload():
    blob_service.create_container(container_name, None, None, False)
    #blob_service.put_block_blob(container_name, blob_name, '', 'BlockBlob')

    chunk_size = 65536
    block_ids = []
    index = 0
    with open(file_path, 'rb') as f:
        while True:
            data = f.read(chunk_size)
            if data:
                length = len(data)
                block_id = base64.b64encode(bytes(index))
                blob_service.put_block(container_name, blob_name, data, block_id)
                block_ids.append(block_id)
                index += 1
            else:
                break

    resp = blob_service.put_block_list(container_name, blob_name, block_ids)

标签: pythonazureblobazure-blob-storage

解决方案


我在您的代码中看到的一个问题是您正在使用index变量来创建块 ID。请注意,块 ID 的长度必须相同。在您的情况下,第一个 10 个块 (0 - 9) 将具有一个长度,然后接下来的 90 个块 (10 - 99) 个块将具有不同的长度,这将导致您的 blob 上传失败。

两种可能的解决方案:

  1. 填充index变量:您可以index用适当数量的零填充变量,以使它们的长度相等。例如,您可以执行类似0000, 0001.... 0009, 0010...
  2. 使用 UUID 创建块 ID。请参阅这篇文章了解更多详细信息:如何在 Python 中创建 GUID/UUID

我前段时间写了一篇关于它的博客文章,您可能会觉得有用:https ://gauravmantri.com/2013/05/18/windows-azure-blob-storage-dealing-with-the-specified-blob-or-块内容是无效错误/


推荐阅读