You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python3上传Blob存储时quote_from_bytes()报错,传入数据为bytes

上传Azure Blob存储时出现quote_from_bytes() expected bytes错误

我的代码如下:

print(type(img['image'])) #Output is <class 'bytes'>

connection_string = get_blob_connection_string()
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
blob_client = blob_service_client.get_blob_client(container="images", blob=img['id'])

exists = blob_client.exists()
if (exists == False):
    result = blob_client.upload_blob(img['image'], blob_type="blockblob")
    print(result)

执行上传操作时抛出错误:

quote_from_bytes() expected bytes

明明传入的是bytes类型数据,这一错误令人费解,请问我忽略了什么?


问题分析与解决方法

1. Blob名称(img['id'])类型异常

这个错误的触发点通常不是上传的文件内容,而是Blob名称的URL编码过程。如果img['id']不是字符串类型(比如是bytes、数字或其他非字符串对象),SDK在对Blob名称进行URL编码时会调用quote_from_bytes(),此时若传入非bytes的不可编码对象就会报错。

解决方法:
强制将img['id']转换为字符串类型:

# 处理Blob名称,确保为字符串
blob_name = str(img['id']) if not isinstance(img['id'], str) else img['id']
# 如果是bytes类型,先解码
if isinstance(img['id'], bytes):
    blob_name = img['id'].decode('utf-8')

blob_client = blob_service_client.get_blob_client(container="images", blob=blob_name)

2. 上传内容被包装为bytes子类

虽然type(img['image'])显示为<class 'bytes'>,但部分场景下它可能是bytes的自定义子类(比如某些图像处理库返回的包装对象),这类对象在SDK内部处理时可能被识别为非标准bytes。

解决方法:
将上传内容转换为纯bytes对象:

result = blob_client.upload_blob(bytes(img['image']), blob_type="blockblob")

3. Azure存储SDK版本问题

旧版本的azure-storage-blob库可能存在类型处理的兼容问题,导致对合法bytes对象的误判。

解决方法:
升级到最新稳定版SDK:

pip install --upgrade azure-storage-blob

内容的提问来源于stack exchange,提问作者Dave

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 08:23:55