نسخ كائن ثنائي كبير الحجم من عنوان URL لكائن مصدر باستخدام Python

توضح هذه المقالة كيفية نسخ كائن ثنائي كبير الحجم من عنوان URL للكائن المصدر باستخدام مكتبة عميل Azure Storage ل Python. يمكنك نسخ كائن ثنائي كبير الحجم من مصدر داخل نفس حساب التخزين، أو من مصدر في حساب تخزين مختلف، أو من أي كائن يمكن الوصول إليه يتم استرداده عبر طلب HTTP GET على عنوان URL معين.

تستخدم أساليب مكتبة العميل المغطاة في هذه المقالة عمليات Put Blob From URL و Put Block From URL REST API. يفضل استخدام هذه الأساليب لسيناريوهات النسخ حيث تريد نقل البيانات إلى حساب تخزين ولديك عنوان URL للكائن المصدر. لعمليات النسخ حيث تريد جدولة غير متزامنة، راجع نسخ كائن ثنائي كبير الحجم بجدولة غير متزامنة باستخدام Python.

للتعرف على نسخ الكائنات الثنائية كبيرة الحجم باستخدام واجهات برمجة التطبيقات غير المتزامنة، راجع نسخ كائن ثنائي كبير الحجم من عنوان URL للكائن المصدر بشكل غير متزامن.

المتطلبات الأساسية

إعداد بيئتك

إذا لم يكن لديك مشروع موجود، يوضح لك هذا القسم كيفية إعداد مشروع للعمل مع مكتبة عميل 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 لكائن مصدر باستخدام واجهات برمجة التطبيقات غير المتزامنة:

  1. إضافة عبارات الاستيراد التالية:

    import asyncio
    
    from azure.identity.aio import DefaultAzureCredential
    from azure.storage.blob.aio import BlobServiceClient, BlobClient
    
  2. أضف التعليمات البرمجية لتشغيل البرنامج باستخدام 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())
    
  3. إضافة تعليمة برمجية لنسخ كائن ثنائي كبير الحجم من عنوان 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، راجع الموارد التالية.

نماذج التعليمات البرمجية

عمليات واجهة برمجة تطبيقات REST

يحتوي Azure SDK ل Python على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات REST API من خلال نماذج Python المألوفة. تستخدم أساليب مكتبة العميل التي تغطيها هذه المقالة عمليات واجهة برمجة تطبيقات REST التالية:

موارد مكتبة العميل

  • هذه المقالة هي جزء من دليل مطور Blob Storage ل Python. لمعرفة المزيد، راجع القائمة الكاملة لمقالات دليل المطور في إنشاء تطبيق Python.