Мне нужно загрузить изображение, созданное из Python в Azure Хранилище BLOB-объектов, без сохранения его локально. На этом этапе я генерирую изображение, сохраняю его локально и загружаю в хранилище (см. Код ниже), но мне нужно запустить его для большого количества изображений, и оно не должно зависеть от локального хранилища.
Я попытался сохранить его в виде потока (в частности, потока байтов), так как загрузка, кажется, работает и с потоком (извините, если это наивный подход, я не настолько опытен в Python), но Я понятия не имею, как использовать его в процессе загрузки. Если я использую его так же, как при открытии локального файла, он загружает пустой файл.
Я использую azure -storage-blob версия 12.2.0. Я заметил, что в предыдущей версии azure -storage-blob была возможность загрузки из потока (в частности, BlockBlobService.get_blob_to_stream), но я не могу найти его в этой версии и не могу понизить пакет из-за некоторых зависимостей.
Любая помощь очень ценится.
import matplotlib.pyplot as plt
import numpy as np
from io import BytesIO
from azure.storage.blob import ContainerClient
# create some mock data
t = np.arange(0.01, 10.0, 0.01)
data1 = np.sin(2 * np.pi * t)
# plot it
fig, ax1 = plt.subplots()
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp')
ax1.plot(t, data1)
# save it locally
plt.savefig("example.png")
# create a blob client and upload the file
container_client = ContainerClient.from_container_url(container_SASconnection_string)
blob_client = container_client.get_blob_client(blob = "example.png")
with open("example.png") as data:
blob_client.upload_blob(data, blob_type="BlockBlob")
# ALTERNATIVELY, instead of saving locally save it as an image stream
fig, ax1 = plt.subplots()
ax1.set_xlabel('time (s)')
ax1.set_ylabel('exp')
ax1.plot(t, data1)
image_stream = BytesIO()
plt.savefig(image_stream)
# but this does not work (it uploads an empty file)
# blob_client.upload_blob(image_stream, blob_type="BlockBlob")