Python ile blok blobu yükleme
Bu makalede, Python için Azure Depolama istemci kitaplığını kullanarak bir blobu karşıya yükleme işlemi gösterilmektedir. Bir dosya yolundan, akıştan, ikili nesneden veya metin dizesinden blok bloba veri yükleyebilirsiniz. Blobları dizin etiketleriyle de karşıya yükleyebilirsiniz.
Zaman uyumsuz API'leri kullanarak blobları karşıya yükleme hakkında bilgi edinmek için bkz . Blobları zaman uyumsuz olarak karşıya yükleme.
Önkoşullar
- Azure aboneliği - ücretsiz bir abonelik oluşturun
- Azure depolama hesabı - depolama hesabı oluşturma
- Python 3.8+
Ortamınızı ayarlama
Mevcut bir projeniz yoksa, bu bölümde Python için Azure Blob Depolama istemci kitaplığıyla çalışmak üzere bir projenin nasıl ayarlanacağı gösterilir. Diğer ayrıntılar için bkz. Azure Blob Depolama ve Python'ı kullanmaya başlama.
Bu makaledeki kod örnekleriyle çalışmak için projenizi ayarlamak için bu adımları izleyin.
Paketleri yükleme
kullanarak pip install
aşağıdaki paketleri yükleyin:
pip install azure-storage-blob azure-identity
İçeri aktarma deyimleri ekleme
Aşağıdaki import
deyimlerini ekleyin:
import io
import os
import uuid
from azure.identity import DefaultAzureCredential
from azure.storage.blob import BlobServiceClient, ContainerClient, BlobBlock, BlobClient, StandardBlobTier
Yetkilendirme
Yetkilendirme mekanizması, blobu karşıya yüklemek için gerekli izinlere sahip olmalıdır. Microsoft Entra Id ile yetkilendirme için (önerilir), Azure RBAC yerleşik rolü Depolama Blob Verileri Katkıda Bulunanı veya üzeri gerekir. Daha fazla bilgi edinmek için Put Blob (REST API) ve Put Block (REST API) yetkilendirme kılavuzuna bakın.
İstemci nesnesi oluşturma
Bir uygulamayı Blob Depolama'ya bağlamak için bir BlobServiceClient örneği oluşturun. Aşağıdaki örnekte yetkilendirme için kullanarak DefaultAzureCredential
bir istemci nesnesinin nasıl oluşturulacağı gösterilmektedir:
# TODO: Replace <storage-account-name> with your actual storage account name
account_url = "https://<storage-account-name>.blob.core.windows.net"
credential = DefaultAzureCredential()
# Create the BlobServiceClient object
blob_service_client = BlobServiceClient(account_url, credential=credential)
Ayrıca, doğrudan veya nesneden BlobServiceClient
belirli kapsayıcılar veya bloblar için istemci nesneleri oluşturabilirsiniz. İstemci nesneleri oluşturma ve yönetme hakkında daha fazla bilgi edinmek için bkz . Veri kaynaklarıyla etkileşim kuran istemci nesneleri oluşturma ve yönetme.
Blok bloba veri yükleme
Akış veya ikili nesne kullanarak bir blobu karşıya yüklemek için aşağıdaki yöntemi kullanın:
Bu yöntem, otomatik öbekleme ile bir veri kaynağından yeni bir blob oluşturur; bu da veri kaynağının daha küçük öbeklere bölünebileceği ve karşıya yüklenebileceği anlamına gelir. Karşıya yüklemeyi gerçekleştirmek için istemci kitaplığı Put Blob veya bir dizi Put Block çağrısı ve ardından Put Block List kullanabilir. Bu davranış, nesnenin genel boyutuna ve veri aktarımı seçeneklerinin nasıl ayarlandığına bağlıdır.
Yerel dosya yolundan blok blobu yükleme
Aşağıdaki örnek, nesne kullanarak BlobClient
bir dosyayı blok bloba yükler:
def upload_blob_file(self, blob_service_client: BlobServiceClient, container_name: str):
container_client = blob_service_client.get_container_client(container=container_name)
with open(file=os.path.join('filepath', 'filename'), mode="rb") as data:
blob_client = container_client.upload_blob(name="sample-blob.txt", data=data, overwrite=True)
Akıştan blok blobu yükleme
Aşağıdaki örnek rastgele veri baytları oluşturur ve nesnesini kullanarak BlobClient
bir BytesIO
nesneyi blok bloba yükler:
def upload_blob_stream(self, blob_service_client: BlobServiceClient, container_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
input_stream = io.BytesIO(os.urandom(15))
blob_client.upload_blob(input_stream, blob_type="BlockBlob")
İkili verileri blok bloba yükleme
Aşağıdaki örnek, nesne kullanarak BlobClient
ikili verileri blok bloba yükler:
def upload_blob_data(self, blob_service_client: BlobServiceClient, container_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob="sample-blob.txt")
data = b"Sample data for blob"
# Upload the blob data - default blob type is BlockBlob
blob_client.upload_blob(data, blob_type="BlockBlob")
Dizin etiketleriyle blok blobu karşıya yükleme
Aşağıdaki örnek, dizin etiketlerine sahip bir blok blobunu karşıya yükler:
def upload_blob_tags(self, blob_service_client: BlobServiceClient, container_name: str):
container_client = blob_service_client.get_container_client(container=container_name)
sample_tags = {"Content": "image", "Date": "2022-01-01"}
with open(file=os.path.join('filepath', 'filename'), mode="rb") as data:
blob_client = container_client.upload_blob(name="sample-blob.txt", data=data, tags=sample_tags)
Yapılandırma seçenekleriyle blok blobu karşıya yükleme
Blobu karşıya yüklerken istemci kitaplığı yapılandırma seçeneklerini tanımlayabilirsiniz. Bu seçenekler performansı geliştirmek, güvenilirliği artırmak ve maliyetleri iyileştirmek için ayarlanabilir. Aşağıdaki kod örneklerinde, blobclient örneği oluştururken hem yöntem düzeyinde hem de istemci düzeyinde karşıya yükleme için yapılandırma seçeneklerinin nasıl tanımlanacağı gösterilmektedir. Bu seçenekler bir ContainerClient örneği veya BlobServiceClient örneği için de yapılandırılabilir.
Karşıya yükleme için veri aktarımı seçeneklerini belirtme
Veri aktarımı işlemlerinin performansını iyileştirmek için istemci örneği oluştururken yapılandırma seçeneklerini ayarlayabilirsiniz. Python'da bir istemci nesnesi oluştururken aşağıdaki anahtar sözcük bağımsız değişkenlerini geçirebilirsiniz:
max_block_size
- Blok blobunu öbeklere yüklemek için en büyük öbek boyutu. Varsayılan değer 4 MiB'dir.max_single_put_size
- Blob boyutu değerinden küçük veya buna eşitsemax_single_put_size
blob tekPut Blob
bir istekle karşıya yüklenir. Blob boyutu değerindenmax_single_put_size
büyük veya bilinmiyorsa blob kullanılarakPut Block
öbekler halinde karşıya yüklenir ve kullanılarakPut Block List
işlenir. Varsayılan değer 64 MiB'dir.
Blob Depolama için aktarım boyutu sınırları hakkında daha fazla bilgi için bkz . Blob depolama için hedefleri ölçeklendirme.
Karşıya yükleme işlemleri için, upload_blob çağırırken bağımsız değişkeni de geçirebilirsinizmax_concurrency
. Bu bağımsız değişken, blob boyutu 64 MiB'yi aştığında kullanılacak en fazla paralel bağlantı sayısını tanımlar.
Aşağıdaki kod örneği, nesne BlobClient
oluştururken veri aktarımı seçeneklerini belirtmeyi ve bu istemci nesnesini kullanarak verileri karşıya yüklemeyi gösterir. Bu örnekte sağlanan değerler bir öneri olarak tasarlanmamıştır. Bu değerleri düzgün ayarlamak için uygulamanızın belirli gereksinimlerini dikkate almanız gerekir.
def upload_blob_transfer_options(self, account_url: str, container_name: str, blob_name: str):
# Create a BlobClient object with data transfer options for upload
blob_client = BlobClient(
account_url=account_url,
container_name=container_name,
blob_name=blob_name,
credential=DefaultAzureCredential(),
max_block_size=1024*1024*4, # 4 MiB
max_single_put_size=1024*1024*8 # 8 MiB
)
with open(file=os.path.join(r'file_path', blob_name), mode="rb") as data:
blob_client = blob_client.upload_blob(data=data, overwrite=True, max_concurrency=2)
Veri aktarımı seçeneklerini ayarlama hakkında daha fazla bilgi edinmek için bkz . Python ile karşıya yüklemeler ve indirmeler için performans ayarlama.
Karşıya yüklemede blob'un erişim katmanını ayarlama
Anahtar sözcük bağımsız değişkenini upload_blob geçirerek karşıya yüklemede blob'un standard_blob_tier
erişim katmanını ayarlayabilirsiniz. Azure Depolama, blob verilerinizi nasıl kullanıldıklarına bağlı olarak en etkili şekilde depolayabilmeniz için farklı erişim katmanları sunar.
Aşağıdaki kod örneğinde blob karşıya yüklenirken erişim katmanının nasıl ayarlanacağı gösterilmektedir:
def upload_blob_access_tier(self, blob_service_client: BlobServiceClient, container_name: str, blob_name: str):
blob_client = blob_service_client.get_blob_client(container=container_name, blob=blob_name)
#Upload blob to the cool tier
with open(file=os.path.join(r'file_path', blob_name), mode="rb") as data:
blob_client = blob_client.upload_blob(data=data, overwrite=True, standard_blob_tier=StandardBlobTier.COOL)
Erişim katmanının ayarlanmasına yalnızca blok blobları için izin verilir. Blok blobu için erişim katmanını Hot
, , Cool
Cold
veya Archive
olarak ayarlayabilirsiniz. Erişim katmanını olarak ayarlamak için Cold
en az 12.15.0 istemci kitaplığı sürümünü kullanmanız gerekir.
Erişim katmanları hakkında daha fazla bilgi edinmek için bkz . Erişim katmanlarına genel bakış.
Blokları hazırlama ve işleme yoluyla blok blobu yükleme
Tek tek veri bloklarını el ile hazırlayarak karşıya yüklemeleri bloklara bölme konusunda daha fazla denetime sahip olabilirsiniz. Blobu oluşturan tüm bloklar hazırlandığında, bunları Blob Depolama'ya işleyebilirsiniz.
Bir blobun parçası olarak işlenecek yeni bir blok oluşturmak için aşağıdaki yöntemi kullanın:
Blobu oluşturan blok kimliklerinin listesini belirterek blob yazmak için aşağıdaki yöntemi kullanın:
Aşağıdaki örnek bir dosyadaki verileri okur ve blobun parçası olarak işlenecek blokları aşamalar:
def upload_blocks(self, blob_container_client: ContainerClient, local_file_path: str, block_size: int):
file_name = os.path.basename(local_file_path)
blob_client = blob_container_client.get_blob_client(file_name)
with open(file=local_file_path, mode="rb") as file_stream:
block_id_list = []
while True:
buffer = file_stream.read(block_size)
if not buffer:
break
block_id = uuid.uuid4().hex
block_id_list.append(BlobBlock(block_id=block_id))
blob_client.stage_block(block_id=block_id, data=buffer, length=len(buffer))
blob_client.commit_block_list(block_id_list)
Blobları zaman uyumsuz olarak karşıya yükleme
Python için Azure Blob Depolama istemci kitaplığı, blobların zaman uyumsuz olarak karşıya yüklenmesini destekler. Proje kurulum gereksinimleri hakkında daha fazla bilgi edinmek için bkz . Zaman uyumsuz programlama.
Zaman uyumsuz API'leri kullanarak bir blobu karşıya yüklemek için şu adımları izleyin:
Aşağıdaki içeri aktarma deyimlerini ekleyin:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobClient, ContainerClient
kullanarak
asyncio.run
programı çalıştırmak için kod ekleyin. Bu işlev,main()
örneğimizde geçirilen eş yordamları çalıştırır ve olay döngüsünü yönetirasyncio
. Eş yordamlar zaman uyumsuz/await söz dizimi ile bildirilir. Bu örnekte,main()
coroutine önce kullanarakasync with
en üst düzeyiBlobServiceClient
oluşturur, ardından blobu karşıya yükleyen yöntemi çağırır. Yalnızca en üst düzey istemcinin kullanmasıasync with
gerektiğini unutmayın; bu istemciden oluşturulan diğer istemciler aynı bağlantı havuzunu paylaşır.async def main(): sample = BlobSamples() # TODO: Replace <storage-account-name> with your actual storage account name account_url = "https://<storage-account-name>.blob.core.windows.net" credential = DefaultAzureCredential() async with BlobServiceClient(account_url, credential=credential) as blob_service_client: await sample.upload_blob_file(blob_service_client, "sample-container") if __name__ == '__main__': asyncio.run(main())
Blobu karşıya yüklemek için kod ekleyin. Aşağıdaki örnek, bir nesne kullanarak yerel dosya yolundan bir
ContainerClient
blob yükler. Kod, zaman uyumlu örnekle aynıdır, ancak yöntemi anahtar sözcüğüyleasync
bildirilir veawait
yöntemi çağrılırkenupload_blob
anahtar sözcüğü kullanılır.async def upload_blob_file(self, blob_service_client: BlobServiceClient, container_name: str): container_client = blob_service_client.get_container_client(container=container_name) with open(file=os.path.join('filepath', 'filename'), mode="rb") as data: blob_client = await container_client.upload_blob(name="sample-blob.txt", data=data, overwrite=True)
Bu temel kurulumla, bu makaledeki diğer örnekleri zaman uyumsuz/await söz dizimini kullanarak eş yordam olarak uygulayabilirsiniz.
Kaynaklar
Python için Azure Blob Depolama istemci kitaplığını kullanarak blobları karşıya yükleme hakkında daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın.
Kod örnekleri
- Bu makaledeki (GitHub) zaman uyumlu veya zaman uyumsuz kod örneklerini görüntüleyin
REST API işlemleri
Python için Azure SDK, Azure REST API'sinin üzerinde derlenmiş kitaplıklar içerir ve tanıdık Python paradigmalarıyla REST API işlemleriyle etkileşim kurmanızı sağlar. Blobları karşıya yüklemek için istemci kitaplığı yöntemleri aşağıdaki REST API işlemlerini kullanır:
İstemci kitaplığı kaynakları
Ayrıca bkz.
- Blob dizini etiketleriyle Azure Blob verilerini yönetme ve bulma
- Azure Blob Depolama verileri yönetmek ve bulmak için blob dizini etiketlerini kullanma
İlgili içerik
- Bu makale, Python için Blob Depolama geliştirici kılavuzunun bir parçasıdır. Daha fazla bilgi edinmek için Python uygulamanızı oluşturma makalesinde geliştirici kılavuzu makalelerinin tam listesine bakın.