错误代码:附加到 blob 时 InvalidBlobType

cna*_*cna 3 python azure azure-blob-storage

我正在尝试将新的 json 行附加到容器中现有的 json 文件中。下面是我的代码:

import json
import os

from azure.storage.blob import (
    BlockBlobService, AppendBlobService
)
from DBConnection import account_name, container_name, account_key


def getData(self, resp, filename):

        blobService = BlockBlobService(account_name=account_name, account_key=account_key)
        appendblobservice = AppendBlobService(account_name=account_name, account_key=account_key)

        resp = json.dumps(self.resp) #CONVERT FROM DICT TO STR

        filename = self.filename + ".json" #eg: 'ww1_abcded_202002031100.json'

        file_exist = blobService.exists(container_name, filename)

        if file_exist is False:
            print("inside IF")
            blobService.create_blob_from_text(container_name, filename, self.resp)


        else:
            print("Inside else")
            appendblobservice.append_blob_from_text(container_name, filename, self.resp)
            print("2345675t43")
Run Code Online (Sandbox Code Playgroud)

我遇到错误append_blob_from_text并产生以下错误:

azure.common.AzureConflictHttpError: blob 类型对此操作无效。错误代码:InvalidBlobType InvalidBlobTypeBlob 类型对此操作无效。

Gau*_*tri 5

我相信您收到此错误是因为您正在调用仅适用Append BlobBlock Blob.

您的以下代码创建了一个 Block Blob:

blobService.create_blob_from_text(container_name, filename, self.resp)
Run Code Online (Sandbox Code Playgroud)

但是,您正在尝试执行仅附加 blob 操作:

appendblobservice.append_blob_from_text(container_name, filename, self.resp)
Run Code Online (Sandbox Code Playgroud)

因此,您会收到此错误。

两种可能的解决方案:

  1. 如果您希望使用追加 blob,请创建追加 blob 而不是块 blob。您可以使用create_blob创建一个空的追加 blob,然后使用 方法追加内容append_blob_from_text
  2. 如果您希望使用块 blob,则为了附加内容,首先您需要使用get_blob_to_text方法下载 blob 的内容,附加新内容,然后使用create_blob_from_text方法重新上传 blob。