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
相关产品推荐
相关产品推荐

