How to upload files to Azure blob using Python
Azure Blob storage is Microsoft’s object storage solution for the cloud. Blob storage is optimized for storing massive amounts of unstructured data, such as text or binary data.
Blob storage is ideal for:
- Serving images or documents directly to a browser
Storing files for distributed access
Streaming video and audio
Storing data for backup and restore, disaster recovery, and archiving
Storing data for analysis by an on-premises or Azure-hosted service
Prerequisites
Python 2.7, or 3.5 or later is required to use this package.
You must have an Azure subscription and an Azure storage account to use this package.
Install the package
Install the Azure Storage Blobs client library for Python with pip:
pip install azure-storage-blob
Create a storage account
If you wish to create a new storage account, you can use the Azure Portal, Azure PowerShell.
Create the client
The Azure Storage Blobs client library for Python allows you to interact with three types of resources: the storage account itself, blob storage containers, and blobs. Interaction with these resources starts with an instance of a client. To create a client object, you will need the storage account’s blob service account URL and a credential that allows you to access the storage account:
from azure.storage.blob import BlobServiceClient service = BlobServiceClient(account_url="https://.blob.core.windows.net/", credential=credential)
Looking up the account URL
You can find the storage account’s blob service URL using the Azure Portal, Azure PowerShell.
Key Points
- Create a Storage Account using the Azure Portal.
- Create a container.
- Upload a file to block blob.
- List blobs.
- Download a blob to file.
- Delete a blob.
- Delete the container.
- How to Upload Files to Azure Storage Blobs Using Python
The following program demonstrates a typical use case where you want to bulk upload a set of jpg images from a local folder to the Azure blob storage container. Note that for large number of files, this program may not be efficient as it sequentially uploads the images.
Replace MY_CONNECTION_STRING, MY_IMAGE_CONTAINER and LOCAL_IMAGE_PATH before running the program :
# upload_blob_images.py # Python program to bulk upload jpg image files as blobs to azure storage # Uses latest python SDK() for Azure blob storage # Requires python 3.6 or above import os from azure.storage.blob import BlobServiceClient BlobClient from azure.storage.blob import ontentSettings, ContainerClient # IMPORTANT: Replace connection string with your storage account connection string # Usually starts with DefaultEndpointsProtocol= https;... MY_CONNECTION_STRING = "REPLACE_THIS" # Replace with blob container. This should be already created in azure storage. MY_IMAGE_CONTAINER = "myimages" # Replace with the local folder which contains the image files for upload LOCAL_IMAGE_PATH = "REPLACE_THIS" class AzureBlobFileUploader: def __init__(self): print("Intializing AzureBlobFileUploader") # Initialize the connection to Azure storage account self.blob_service_client = BlobServiceClient.from_connection_string(MY_CONNECTION_STRING) def upload_all_images_in_folder(self): # Get all files with jpg extension and exclude directories all_file_names = [f for f in os.listdir(LOCAL_IMAGE_PATH) if os.path.isfile(os.path.join(LOCAL_IMAGE_PATH, f)) and ".jpg" in f] # Upload each file for file_name in all_file_names: self.upload_image(file_name) def upload_image(self,file_name): # Create blob with same name as local file name blob_client = self.blob_service_client.get_blob_client(container = MY_IMAGE_CONTAINER, blob = file_name) # Get full path to the file upload_file_path = os.path.join(LOCAL_IMAGE_PATH, file_name) # Create blob on storage # Overwrite if it already exists.