在 Python3 中上传到 blob 存储时,当数据为字节格式时,quote_from_bytes() 会出现预期字节错误

问题描述 投票:0回答:2

有人可以告诉我尝试将图像上传到 blob 存储时做错了什么吗?下面是我的代码。

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)

插入 blob 时,会抛出错误

quote_from_bytes() 预期字节

这个错误没有意义,我给了它字节。我错过了什么?

azure-blob-storage python-3.8
2个回答
0
投票

从我这边复制后,我也收到了同样的问题。由于文件类型不兼容(即文件格式),您收到此错误。

enter image description here

将以下行更改为正确的格式后,我可以实现您的要求。

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

以下是正确的格式

blob_client=blob_service_client.get_blob_client(container='container', blob='<LOCAL FILE PATH>');

下面是对我有用的完整代码

from  azure.storage.blob  import  BlobServiceClient
from  PIL  import  Image

connection_string = "<CONNECTION STRING>"
blob_service_client = BlobServiceClient.from_connection_string(connection_string)
blob_client=blob_service_client.get_blob_client(container='container', blob='<LOCALPATH>');

with  open(file='<PATH IN YOUR STORAGE ACCOUNT WITH FILE NAME>', mode="rb") as  data:

blob_client.upload_blob(data)

结果:

enter image description here


0
投票

导致此错误的另一个原因是为

BlobServiceClient.get_blob_client
提供
Path
对象
作为 blob 名称(
blob
参数)。在这种情况下,您必须自己进行转换以串接:

file_path = Path("my_path")
blob_client = blob_service_client.get_blob_client(container="my_container", blob=str(file_path))

ContainerClient.get_blob_client
ContainerClient.upload_blob
以及可能其他相关方法也会出现同样的错误。

© www.soinside.com 2019 - 2024. All rights reserved.