如何向Azure现有Blob追加文本数据?遇InvalidBlobType错误求解
解决Azure Blob追加内容时的InvalidBlobType错误
错误原因
append_block()方法仅支持追加型Blob(Append Blob),而你当前的LIST.txt是默认创建的块Blob(Block Blob),块Blob不支持追加块操作,因此触发InvalidBlobType错误。
解决方案
方案1:改用追加型Blob(推荐,适合频繁追加场景)
追加型Blob专为日志、记录这类需要持续追加的场景设计,操作效率更高,步骤如下:
- 若原Blob是块Blob,先迁移现有数据到新的追加型Blob
- 后续使用
append_block()完成追加操作
代码示例:
# 获取原块Blob的数据 original_blob_client = container_client.get_blob_client("LIST.txt") original_data = b"" if original_blob_client.exists(): original_data = original_blob_client.download_blob().readall() # 创建追加型Blob(不存在则新建) append_blob_client = container_client.get_blob_client("LIST.txt") if not append_blob_client.exists(): append_blob_client.create_append_blob() # 写入原数据 if original_data: append_blob_client.append_block(original_data) # 追加新内容 new_value = "2200\n" append_blob_client.append_block(new_value.encode('utf-8')) # 验证内容并检查值是否存在 downloaded_content = append_blob_client.download_blob().readall().decode('utf-8') ans_list = downloaded_content.splitlines() if "2200" in ans_list: print("Num Exists")
注:如果原
LIST.txt已存在且为块Blob,需要先删除原Blob,再创建同名的追加型Blob,避免冲突。
方案2:基于块Blob实现追加(适合小文件/偶尔追加场景)
如果不想切换Blob类型,可通过「下载原内容→拼接新内容→上传覆盖」的方式模拟追加:
blob_client = container_client.get_blob_client("LIST.txt") # 下载现有内容 existing_content = "" if blob_client.exists(): existing_content = blob_client.download_blob().readall().decode('utf-8') # 拼接新内容(保留换行格式) new_value = "2200\n" updated_content = existing_content + new_value # 上传覆盖原Blob blob_client.upload_blob(updated_content, overwrite=True) # 验证并检查值 downloaded_content = blob_client.download_blob().readall().decode('utf-8') ans_list = downloaded_content.splitlines() if "2200" in ans_list: print("Num Exists")
注:该方式在Blob内容较大时效率低下,且多进程并发修改可能导致数据冲突。
关键注意事项
- 追加型Blob单块最大支持4000MiB,总容量最大190.7TiB,适合高频追加场景
- 块Blob的模拟追加方式仅适合小文件或低频次修改场景,避免频繁大文件下载上传
内容的提问来源于stack exchange,提问作者Abhishek Rai
相关产品推荐
相关产品推荐

