2
votes

Télécharger une image vers le stockage d'objets blob Azure à l'aide de python

J'ai un répertoire d' images nommé images qui contient des fichiers image comme:

images
    --0001.png
    --0002.jpg
    --0003.png

Maintenant, je veux télécharger ce répertoire sur mon stockage blob azure avec la même structure de fichiers. J'ai regardé l'exemple de code donné ici et ici mais:

  1. Même après avoir installé azure-blob-storage , il n'y a rien de tel que BlobService dans ce package.
  2. Y a-t-il un endroit où il est clairement documenté comment procéder?


0 commentaires

4 Réponses :


1
votes

C'est dans la documentation que vous avez liée.

Ce n'est pas BlobService, c'est BlobClient.

from azure.storage.blob import BlobClient

blob = BlobClient.from_connection_string("my_connection_string", container="mycontainer", blob="my_blob")

with open("./SampleSource.txt", "rb") as data:
    blob.upload_blob(data)


0 commentaires

2
votes

Voici mon exemple de code fonctionne très bien pour moi.

import os
from azure.storage.blob import BlockBlobService

root_path = '<your root path>'
dir_name = 'images'
path = f"{root_path}/{dir_name}"
file_names = os.listdir(path)

account_name = '<your account name>'
account_key = '<your account key>'
container_name = '<your container name, such as `test` for me>'

block_blob_service = BlockBlobService(
    account_name=account_name,
    account_key=account_key
)

for file_name in file_names:
    blob_name = f"{dir_name}/{file_name}"
    file_path = f"{path}/{file_name}"
    block_blob_service.create_blob_from_path(container_name, blob_name, file_path)

Le résultat comme la figure ci-dessous est une capture d'écran d' Azure Storage Explorer .

entrez la description de l'image ici

Pour plus d'informations sur les références d'API du SDK Azure Storage pour Python, consultez https://azure-storage.readthedocs.io/index.html .


Mise à jour: Ma version Python utilisée est Python 3.7.4 sur Windows, et le package requis est azure-storage==0.36.0 , vous pouvez le trouver sur https://pypi.org/project/azure-storage/ .

  1. $ virtualenv test
  2. $ cd test
  3. $ Scripts\active
  4. $ pip install azure-storage

Ensuite, vous pouvez exécuter mon exemple de code via python upload_images.py dans l'environnement virtuel Python actuel.


2 commentaires

Le fait est que même après l'installation de azure-blob-storage , il n'y a pas de BlockBlobService dans ce package.


@mlRocks Veuillez lancer l'environnement virtuel Python et installer le package azure-storage . J'ai mis à jour mon message.



0
votes

Il existe actuellement deux versions d'azure.storage.blob. Si vous créez une machine virtuelle Azure et y traitez des données, vous pouvez vous retrouver avec l'un ou l'autre.

L'ancienne version nécessite (comme l'a souligné Adam Marczak):

from azure.storage.blob import BlockBlobService

blob_service = BlockBlobService(account_name, account_key)

blob_service.create_blob_from_path(
    container_name, blob_name ,  full_file_path )

tandis que le plus récent:

from azure.storage.blob import BlobClient

blob = BlobClient.from_connection_string("my_connection_string", container="mycontainer", blob="my_blob")

with open("./SampleSource.txt", "rb") as data:
    blob.upload_blob(data)


0 commentaires

0
votes

Apparemment, ni create_blob_from_bytes ni BlockBlobService n'existent dans le dernier SDK python [1] que vous obtenez par défaut à moins que vous ne gériez les versions de divers packages.

Je suppose que vous voudrez peut-être l'exécuter en tant que script autonome. Ainsi, vous pouvez vous authentifier à l'aide d' AzureCliCredential [2] et récupérer les points de terminaison de ressources nécessaires via les méthodes fournies dans le SDK.

Le code ci-dessous ne fonctionnera pas dans les fonctions Azure.

    from azure.storage.blob import (
       BlobServiceClient,
       ContentSettings
    )

    storage_connection_string='DefaultEndpointsProtocol=https;AccountName=<STORAGE_ACCOUNT_NAME>;AccountKey=<ACCOUNT_KEY>;EndpointSuffix=core.windows.net'
    container_name =
    blob_service_client = BlobServiceClient.(
        conn_str=storage_connection_string
        )
    logging.debug(f'getting client for container : {container_name}')
    container_client = 
    blob_service_client.get_container_client(container=container_name)
    blob_client = container_client.get_blob_client(blob_name)
    if blob_client.exists():
        blob_client.delete_blob()
    blob_client =blob_service_client.get_blob_client(container=container_name, 
    blob=blob_name)
    try:
        with open(filename, "rb") as data:
             blob.upload(data)
        content_settings =ContentSettings(content_type='image/png')
        logging.debug(f'setting the content type : {content_settings}')
    except Exception as e:
        logging.error(str(e))

[1] https://docs.microsoft.com/en-us/python/api/azure-storage-blob/azure.storage.blob.blobserviceclient?view=azure-python

[2] https://docs.microsoft.com/en-us/python/api/azure-identity/azure.identity.azureclicredential?view=azure-python


0 commentaires