У меня есть старая лазурная функция, которая использует BlockBlobService ->get_blob_to_bytes. Как описано здесь: https://github.com/uglide/azure-content/blob/master/articles/storage/storage-python-how-to-use-blob-storage.md#download-blobs
Я считаю, что мне нужно обновить BlockBlobService до BlobServiceClient. Но я не могу найти get_blob_to_bytes в BlobServiceClient?
Exception: AttributeError: 'BlobServiceClient' object has no attribute 'get_blob_to_bytes'
Как я могу преобразовать blob в байты с помощью BlobServiceClient?
Редактировать; или мне нужно использовать: https://learn.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.baseblobservice.baseblobservice?view=azure-python-previous #azure-storage-blob-baseblobservice-baseblobservice-get-blob-to-bytes
я получил
Name: azure-storage-blob
Version: 12.16.0
Но нет BlobClient.get_blob_to_bytes.... Или, по крайней мере, когда я пытаюсь это сделать??
Edit3: чтобы еще больше запутать, я использую сообщения из очереди. И при создании экземпляра BlobClient ожидается account_url, container_name и blob_name. Все хорошо, если у вас есть контейнер , но у меня есть очередь.
Любой?
Но нет BlobClient.get_blob_to_bytes.... Или, по крайней мере, когда я пытаюсь это сделать??
Да, как вы упомянули, в get_blob_to_bytes()
нет BlobClient
. Однако вы можете получить желаемые результаты, используя download_blob().readall()
.
from azure.storage.blob import BlobClient
connection_string = "<CONNECTION_STRING>"
client = BlobClient.from_connection_string(connection_string,'container','abc.txt')
blob_bytes = client.download_blob().readall()
print(blob_bytes)
Полученные результаты:
Edit3: чтобы еще больше запутать, я использую сообщения из очереди. И при создании экземпляра BlobClient ожидается account_url, container_name и blob_name. Все хорошо, если у вас есть контейнер , но у меня есть очередь.
Однако, поскольку ваше требование состоит в том, чтобы получить байты из очереди, используйте QueueClient
. Ниже приведено то, что вы можете попытаться выполнить.
from azure.storage.queue import QueueClient
import base64
connection_string = "<CONNECTION_STRING>"
queue = QueueClient.from_connection_string(conn_str=connection_string, queue_name='queue')
messages = queue.receive_messages()
for message in messages:
print(base64.b64decode(message.content).decode('utf-8').encode('utf-8'))
Полученные результаты:
@otk Службы Blob и Queue разные и имеют разные SDK. Не путайте с Blobs to Queues. У больших двоичных объектов нет такой вещи, как очереди. Поскольку вашим требованием было использовать очередь, я использовал QueueClient
, а не BlobClient
. Упомянутые строки кода в комментариях принадлежат BlobClient
, тогда как в ответе я использовал QueueClient
в соответствии с требованием.
Спасибо, один дополнительный вопрос: в старом коде было Input_blob = BlockBlobService(connection_string) и file = input_blob.get_blob_to_bytes(сообщение['in-container'], сообщение['имя файла']) с использованием некоторых параметров в большом двоичном объекте. Как я могу сделать это с помощью QueueClient. Я на самом деле не понимаю, что здесь делает логика, и это проблема, когда мне нужно ее воссоздать....