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:
azure-blob-storage
, il n'y a rien de tel que BlobService
dans ce package.4 Réponses :
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)
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 .
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/ .
$ virtualenv test
$ cd test
$ Scripts\active
$ pip install azure-storage
Ensuite, vous pouvez exécuter mon exemple de code via python upload_images.py
dans l'environnement virtuel Python actuel.
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.
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)
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))