تحميل كائن ثنائي كبير الحجم للكتلة باستخدام Go

توضح هذه المقالة كيفية تحميل كائن ثنائي كبير الحجم باستخدام وحدة عميل Azure Storage ل Go. يمكنك تحميل البيانات إلى كائن ثنائي كبير الحجم للكتلة من مسار ملف أو دفق أو كائن ثنائي أو سلسلة نصية. يمكنك أيضا تحميل الكائنات الثنائية كبيرة الحجم باستخدام علامات الفهرس.

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

إعداد بيئتك

إذا لم يكن لديك مشروع موجود، يوضح هذا القسم كيفية إعداد مشروع للعمل مع وحدة عميل Azure Blob Storage ل Go. تتضمن الخطوات تثبيت الوحدة النمطية وإضافة import المسارات وإنشاء كائن عميل معتمد. للحصول على التفاصيل، راجع بدء استخدام Azure Blob Storage وGo.

تثبيت الوحدات النمطية

تثبيت الوحدة النمطية azblob باستخدام الأمر التالي:

go get github.com/Azure/azure-sdk-for-go/sdk/storage/azblob

للمصادقة باستخدام معرف Microsoft Entra (مستحسن)، قم بتثبيت الوحدة النمطية azidentity باستخدام الأمر التالي:

go get github.com/Azure/azure-sdk-for-go/sdk/azidentity

إضافة مسارات الاستيراد

في ملف التعليمات البرمجية، أضف مسارات الاستيراد التالية:

import (
    "github.com/Azure/azure-sdk-for-go/sdk/azidentity"
	"github.com/Azure/azure-sdk-for-go/sdk/storage/azblob"
)

تمثل مسارات الاستيراد هذه الحد الأدنى المطلوب للبدء. قد تتطلب بعض أمثلة التعليمات البرمجية في هذه المقالة مسارات استيراد إضافية. للحصول على تفاصيل محددة ومثال على الاستخدام، راجع نماذج التعليمات البرمجية.

إنشاء كائن عميل

لتوصيل تطبيق ب Blob Storage، قم بإنشاء كائن عميل باستخدام azblob. NewClient. يوضح المثال التالي كيفية إنشاء كائن عميل باستخدام DefaultAzureCredential للتخويل:

func getServiceClientTokenCredential(accountURL string) *azblob.Client {
    // Create a new service client with token credential
    credential, err := azidentity.NewDefaultAzureCredential(nil)
    handleError(err)

    client, err := azblob.NewClient(accountURL, credential, nil)
    handleError(err)

    return client
}

التصريح

يجب أن يكون لآلية التخويل الأذونات اللازمة لتحميل كائن ثنائي كبير الحجم. للحصول على تخويل باستخدام معرف Microsoft Entra (مستحسن)، تحتاج إلى دور Azure RBAC المضمن في Storage Blob Data Contributor أو أعلى. لمعرفة المزيد، راجع إرشادات التخويل ل Put Blob (REST API) و Put Block (REST API).

تحميل البيانات إلى كائن ثنائي كبير الحجم للكتلة

لتحميل كائن ثنائي كبير الحجم، قم باستدعاء أي من الطرق التالية من كائن العميل:

لتنفيذ التحميل، قد تستخدم مكتبة العميل إما Put Blob أو سلسلة من استدعاءات Put Block متبوعة ب Put Block List. يعتمد هذا السلوك على الحجم الإجمالي للكائن وكيفية تعيين خيارات نقل البيانات.

تحميل كائن ثنائي كبير الحجم للكتلة من مسار ملف محلي

يقوم المثال التالي بتحميل ملف محلي إلى كتلة كائن ثنائي كبير الحجم:

func uploadBlobFile(client *azblob.Client, containerName string, blobName string) {
    // Open the file for reading
    file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
    handleError(err)

    defer file.Close()

    // Upload the file to the specified container with the specified blob name
    _, err = client.UploadFile(context.TODO(), containerName, blobName, file, nil)
    handleError(err)
}

تحميل كائن ثنائي كبير الحجم للكتلة من دفق

ينشئ المثال التالي مثيلا Reader ويقرأ من سلسلة كما لو كان دفق بايت. ثم يتم تحميل الدفق إلى كائن ثنائي كبير الحجم للكتلة:

func uploadBlobStream(client *azblob.Client, containerName string, blobName string) {
    data := "Hello, world!"
    blobContentReader := strings.NewReader(data)

    // Upload the file to the specified container with the specified blob name
    _, err := client.UploadStream(context.TODO(), containerName, blobName, blobContentReader, nil)
    handleError(err)
}

تحميل البيانات الثنائية إلى كائن ثنائي كبير الحجم للكتلة

يقوم المثال التالي بتحميل البيانات الثنائية إلى كائن ثنائي كبير الحجم للكتلة:

func uploadBlobBuffer(client *azblob.Client, containerName string, blobName string) {
    // Create a buffer with the content of the file to upload
    data := []byte("Hello, world!")

    // Upload the data to a block blob
    _, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, nil)
    handleError(err)
}

تحميل كائن ثنائي كبير الحجم للكتلة باستخدام علامات الفهرس

يقوم المثال التالي بتحميل كائن ثنائي كبير الحجم للكتلة مع علامات الفهرس:

func uploadBlobWithIndexTags(client *azblob.Client, containerName string, blobName string) {
    // Create a buffer with the content of the file to upload
    data := []byte("Hello, world!")

    // Upload the data to a block blob with index tags
    _, err := client.UploadBuffer(context.TODO(), containerName, blobName, data, &azblob.UploadBufferOptions{
        Tags: map[string]string{
            "key1": "value1",
            "key2": "value2",
        },
    })
    handleError(err)
}

تحميل كائن ثنائي كبير الحجم للكتلة مع خيارات التكوين

يمكنك تحديد خيارات تكوين مكتبة العميل عند تحميل كائن ثنائي كبير الحجم. يمكن ضبط هذه الخيارات لتحسين الأداء وتحسين الموثوقية وتحسين التكاليف. توضح أمثلة التعليمات البرمجية التالية كيفية تعريف خيارات التكوين لعملية التحميل.

تحديد خيارات نقل البيانات للتحميل

يمكنك تعيين خيارات التكوين عند تحميل كائن ثنائي كبير الحجم لتحسين الأداء. تتوفر خيارات التكوين التالية لعمليات التحميل:

  • BlockSize: حجم كل كتلة عند تحميل كائن ثنائي كبير الحجم للكتلة. القيمة الافتراضية هي 4 ميغابايت.
  • Concurrency: الحد الأقصى لعدد الاتصالات المتوازية التي يجب استخدامها أثناء التحميل. القيمة الافتراضية هي 5.

تتوفر خيارات التكوين هذه عند التحميل باستخدام الطرق التالية:

لا يدعم أسلوب Upload هذه الخيارات، ويحمل البيانات في طلب واحد.

لمزيد من المعلومات حول حدود حجم النقل لتخزين Blob، راجع أهداف المقياس لتخزين Blob.

يوضح مثال التعليمات البرمجية التالي كيفية تحديد خيارات نقل البيانات باستخدام UploadFileOptions. لا يقصد بالقيم المقدمة في هذه العينة أن تكون توصية. لضبط هذه القيم بشكل صحيح، تحتاج إلى مراعاة الاحتياجات المحددة لتطبيقك.

func uploadBlobWithTransferOptions(client *azblob.Client, containerName string, blobName string) {
    // Open the file for reading
    file, err := os.OpenFile("path/to/sample/file", os.O_RDONLY, 0)
    handleError(err)

    defer file.Close()

    // Upload the data to a block blob with transfer options
    _, err = client.UploadFile(context.TODO(), containerName, blobName, file,
        &azblob.UploadFileOptions{
            BlockSize:   int64(4 * 1024 * 1024), // 4 MiB
            Concurrency: uint16(2),
        })
    handleError(err)
}

لمعرفة المزيد حول خيارات ضبط نقل البيانات، راجع ضبط الأداء للتحميلات والتنزيلات باستخدام Go.

إشعار

تهدف نماذج التعليمات البرمجية في هذا الدليل إلى مساعدتك في البدء في Azure Blob Storage وGo. يجب تعديل معالجة Context الأخطاء والقيم لتلبية احتياجات التطبيق الخاص بك.

الموارد

لمعرفة المزيد حول تحميل الكائنات الثنائية كبيرة الحجم باستخدام وحدة عميل Azure Blob Storage ل Go، راجع الموارد التالية.

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

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

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

موارد وحدة العميل

(راجع أيضًا )

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