نسخ كائن ثنائي كبير الحجم من عنوان URL لكائن مصدر باستخدام Python
توضح هذه المقالة كيفية نسخ كائن ثنائي كبير الحجم من عنوان URL للكائن المصدر باستخدام مكتبة عميل Azure Storage ل Python. يمكنك نسخ كائن ثنائي كبير الحجم من مصدر داخل نفس حساب التخزين، أو من مصدر في حساب تخزين مختلف، أو من أي كائن يمكن الوصول إليه يتم استرداده عبر طلب HTTP GET على عنوان URL معين.
تستخدم أساليب مكتبة العميل المغطاة في هذه المقالة عمليات Put Blob From URL و Put Block From URL REST API. يفضل استخدام هذه الأساليب لسيناريوهات النسخ حيث تريد نقل البيانات إلى حساب تخزين ولديك عنوان URL للكائن المصدر. لعمليات النسخ حيث تريد جدولة غير متزامنة، راجع نسخ كائن ثنائي كبير الحجم بجدولة غير متزامنة باستخدام Python.
للتعرف على نسخ الكائنات الثنائية كبيرة الحجم باستخدام واجهات برمجة التطبيقات غير المتزامنة، راجع نسخ كائن ثنائي كبير الحجم من عنوان URL للكائن المصدر بشكل غير متزامن.
المتطلبات الأساسية
- اشتراك Azure - إنشاء اشتراك مجاني
- حساب تخزين Azure - إنشاء حساب تخزين
- Python 3.8+
إعداد بيئتك
إذا لم يكن لديك مشروع موجود، يوضح لك هذا القسم كيفية إعداد مشروع للعمل مع مكتبة عميل Azure Blob Storage ل Python. لمزيد من التفاصيل، راجع بدء استخدام Azure Blob Storage وPython.
لاستخدام أمثلة التعليمات البرمجية في هذه المقالة، اتبع هذه الخطوات لإعداد مشروعك.
تثبيت الحزم
قم بتثبيت الحزم التالية باستخدام pip install
:
pip install azure-storage-blob azure-identity
إضافة عبارات الاستيراد
أضف عبارات import
التالية:
from azure.identity import DefaultAzureCredential
from azure.storage.blob import (
BlobServiceClient,
BlobClient,
)
التصريح
يجب أن يكون لآلية التخويل الأذونات اللازمة لتنفيذ عملية النسخ. للحصول على تخويل باستخدام معرف Microsoft Entra (مستحسن)، تحتاج إلى دور Azure RBAC المضمن في Storage Blob Data Contributor أو أعلى. لمعرفة المزيد، راجع إرشادات التخويل ل Put Blob From URL (REST API) أو Put Block From URL (REST API).
إنشاء كائن عميل
لتوصيل تطبيق ب Blob Storage، قم بإنشاء مثيل BlobServiceClient. يوضح المثال التالي كيفية إنشاء كائن عميل باستخدام DefaultAzureCredential
للتخويل:
# 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)
يمكنك أيضا إنشاء كائنات العميل لحاويات أو كائنات ثنائية كبيرة الحجم معينة، إما مباشرة أو من BlobServiceClient
العنصر. لمعرفة المزيد حول إنشاء كائنات العميل وإدارتها، راجع إنشاء كائنات العميل التي تتفاعل مع موارد البيانات وإدارتها.
حول نسخ الكائنات الثنائية كبيرة الحجم من عنوان URL لكائن مصدر
Put Blob From URL
تنشئ العملية كائنا ثنائيا جديدا للكتلة حيث تتم قراءة محتويات الكائن الثنائي كبير الحجم من عنوان URL معين. تكتمل العملية بشكل متزامن.
يمكن أن يكون المصدر أي كائن قابل للاسترداد عبر طلب HTTP GET قياسي على عنوان URL المحدد. يتضمن ذلك الكائنات الثنائية كبيرة الحجم للكتلة أو الكائنات الثنائية كبيرة الحجم للإلحاق أو الكائنات الثنائية كبيرة الحجم للصفحة أو لقطات الكائنات الثنائية كبيرة الحجم أو إصدارات الكائن الثنائي كبير الحجم أو أي عنصر يمكن الوصول إليه داخل Azure أو خارجه.
عندما يكون الكائن المصدر كائن ثنائي كبير الحجم للكتلة، يتم نسخ كافة محتوى الكائن الثنائي كبير الحجم الملتزم به. محتوى الكائن الثنائي كبير الحجم الوجهة مطابق لمحتوى المصدر، ولكن لا يتم الاحتفاظ بقائمة الكتل الملتزم بها ولا يتم نسخ الكتل غير الملتزم بها.
الوجهة هي دائما كائن ثنائي كبير الحجم للكتلة، إما كائن ثنائي كبير الحجم للكتلة موجود، أو كائن ثنائي كبير الحجم جديد للكتلة تم إنشاؤه بواسطة العملية. تتم الكتابة فوق محتويات كائن ثنائي كبير الحجم موجود بمحتويات الكائن الثنائي كبير الحجم الجديد.
تنسخ Put Blob From URL
العملية دائما الكائن الثنائي كبير الحجم المصدر بأكمله. نسخ نطاق من وحدات البايت أو مجموعة من الكتل غير مدعوم. لإجراء تحديثات جزئية لمحتويات كائن ثنائي كبير الحجم للكتلة باستخدام عنوان URL المصدر، استخدم واجهة برمجة تطبيقات Put Block From URL مع Put Block List
.
لمعرفة المزيد حول العملية، بما في Put Blob From URL
ذلك قيود حجم الكائن الثنائي كبير الحجم واعتبارات الفوترة، راجع وضع ملاحظات Blob From URL.
نسخ كائن ثنائي كبير الحجم من عنوان URL لكائن مصدر
يقدم هذا القسم نظرة عامة على الأساليب التي توفرها مكتبة عميل Azure Storage ل Python لتنفيذ عملية نسخ من عنوان URL للكائن المصدر.
يلتف الأسلوب التالي عملية Put Blob From URL REST API، وينشئ كتلة blob جديدة حيث تتم قراءة محتويات الكائن الثنائي كبير الحجم من عنوان URL معين:
يفضل استخدام هذه الأساليب للسيناريوهات التي تريد فيها نقل البيانات إلى حساب تخزين ولديك عنوان URL للكائن المصدر.
بالنسبة للكائنات الكبيرة، يمكنك اختيار العمل مع كتل فردية. يلتف الأسلوب التالي عملية Put Block From URL REST API. ينشئ هذا الأسلوب كتلة جديدة ليتم الالتزام بها كجزء من كائن ثنائي كبير الحجم حيث تتم قراءة المحتويات من عنوان URL المصدر:
نسخ كائن ثنائي كبير الحجم من مصدر داخل Azure
إذا كنت تقوم بنسخ كائن ثنائي كبير الحجم من مصدر داخل Azure، يمكن التصريح بالوصول إلى الكائن الثنائي كبير الحجم المصدر عبر معرف Microsoft Entra أو توقيع وصول مشترك (SAS) أو مفتاح حساب.
يوضح المثال التالي سيناريو لنسخ كائن ثنائي كبير الحجم المصدر داخل Azure. يمكن للأسلوب upload_blob_from_url قبول معلمة منطقية اختياريا للإشارة إلى ما إذا كان يجب الكتابة فوق كائن ثنائي كبير الحجم موجود، كما هو موضح في المثال.
def copy_from_source_in_azure(self, source_blob: BlobClient, destination_blob: BlobClient):
# Get the source blob URL and create the destination blob
# set overwrite param to True if you want to overwrite existing blob data
destination_blob.upload_blob_from_url(source_url=source_blob.url, overwrite=False)
نسخ كائن ثنائي كبير الحجم من مصدر خارج Azure
يمكنك تنفيذ عملية نسخ على أي كائن مصدر يمكن استرداده عبر طلب HTTP GET على عنوان URL معين، بما في ذلك الكائنات التي يمكن الوصول إليها خارج Azure. يوضح المثال التالي سيناريو لنسخ كائن ثنائي كبير الحجم من عنوان URL لكائن مصدر يمكن الوصول إليه.
def copy_from_external_source(self, source_url: str, destination_blob: BlobClient):
# Create the destination blob from the source URL
# set overwrite param to True if you want to overwrite existing blob data
destination_blob.upload_blob_from_url(source_url=source_url, overwrite=False)
نسخ كائن ثنائي كبير الحجم من عنوان URL لكائن مصدر بشكل غير متزامن
تدعم مكتبة عميل Azure Blob Storage ل Python نسخ كائن ثنائي كبير الحجم من عنوان URL المصدر بشكل غير متزامن. لمعرفة المزيد حول متطلبات إعداد المشروع، راجع البرمجة غير المتزامنة.
اتبع هذه الخطوات لنسخ كائن ثنائي كبير الحجم من عنوان URL لكائن مصدر باستخدام واجهات برمجة التطبيقات غير المتزامنة:
إضافة عبارات الاستيراد التالية:
import asyncio from azure.identity.aio import DefaultAzureCredential from azure.storage.blob.aio import BlobServiceClient, BlobClient
أضف التعليمات البرمجية لتشغيل البرنامج باستخدام
asyncio.run
. تقوم هذه الدالة بتشغيل coroutine الذي تم تمريره،main()
في مثالنا، وتديرasyncio
حلقة الحدث. يتم الإعلان عن Coroutines باستخدام بناء الجملة غير المتزامن/انتظار. في هذا المثال،main()
يقوم coroutine أولا بإنشاء المستوىBlobServiceClient
الأعلى باستخدامasync with
، ثم يستدعي الأسلوب الذي ينسخ كائن ثنائي كبير الحجم من عنوان URL المصدر. لاحظ أن عميل المستوى الأعلى فقط يحتاج إلى استخدامasync with
، حيث يشارك العملاء الآخرون الذين تم إنشاؤهم منه نفس تجمع الاتصال.async def main(): sample = BlobCopySamples() # 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: # Copy a blob from one container to another in the same storage account source = blob_service_client.get_blob_client(container="source-container", blob="sample-blob.txt") destination = blob_service_client.get_blob_client(container="destination-container", blob="sample-blob.txt") await sample.copy_from_source_in_azure(source_blob=source, destination_blob=destination) if __name__ == '__main__': asyncio.run(main())
إضافة تعليمة برمجية لنسخ كائن ثنائي كبير الحجم من عنوان URL المصدر. مثال التعليمات البرمجية التالي هو نفس المثال المتزامن، باستثناء أن الأسلوب يتم تعريفه باستخدام
async
الكلمة الأساسية ويتمawait
استخدام الكلمة الأساسية عند استدعاءupload_blob_from_url
الأسلوب.async def copy_from_source_in_azure(self, source_blob: BlobClient, destination_blob: BlobClient): # Get the source blob URL and create the destination blob # set overwrite param to True if you want to overwrite existing blob data await destination_blob.upload_blob_from_url(source_url=source_blob.url, overwrite=False)
مع هذا الإعداد الأساسي في مكانه، يمكنك تنفيذ أمثلة أخرى في هذه المقالة ك coroutines باستخدام بناء الجملة غير المتزامن/انتظار.
الموارد
لمعرفة المزيد حول نسخ الكائنات الثنائية كبيرة الحجم باستخدام مكتبة عميل Azure Blob Storage ل Python، راجع الموارد التالية.
نماذج التعليمات البرمجية
- عرض نماذج التعليمات البرمجية المتزامنة أو غير المتزامنة من هذه المقالة (GitHub)
عمليات واجهة برمجة تطبيقات REST
يحتوي Azure SDK ل Python على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات REST API من خلال نماذج Python المألوفة. تستخدم أساليب مكتبة العميل التي تغطيها هذه المقالة عمليات واجهة برمجة تطبيقات REST التالية:
- وضع كائن ثنائي كبير الحجم من عنوان URL (واجهة برمجة تطبيقات REST)
- وضع حظر من عنوان URL (REST API)
موارد مكتبة العميل
المحتوى ذو الصلة
- هذه المقالة هي جزء من دليل مطور Blob Storage ل Python. لمعرفة المزيد، راجع القائمة الكاملة لمقالات دليل المطور في إنشاء تطبيق Python.