تحميل كائن ثنائي كبير الحجم للكتلة باستخدام Go
توضح هذه المقالة كيفية تحميل كائن ثنائي كبير الحجم باستخدام وحدة عميل Azure Storage ل Go. يمكنك تحميل البيانات إلى كائن ثنائي كبير الحجم للكتلة من مسار ملف أو دفق أو كائن ثنائي أو سلسلة نصية. يمكنك أيضا تحميل الكائنات الثنائية كبيرة الحجم باستخدام علامات الفهرس.
المتطلبات الأساسية
- اشتراك Azure - إنشاء اشتراك مجاني
- حساب تخزين Azure - إنشاء حساب تخزين
- Go 1.18+
إعداد بيئتك
إذا لم يكن لديك مشروع موجود، يوضح هذا القسم كيفية إعداد مشروع للعمل مع وحدة عميل 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، راجع الموارد التالية.
نماذج التعليمات البرمجية
- عرض نماذج التعليمات البرمجية من هذه المقالة (GitHub)
عمليات واجهة برمجة تطبيقات REST
يحتوي Azure SDK for Go على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات واجهة برمجة تطبيقات REST من خلال نماذج Go المألوفة. تستخدم أساليب مكتبة العميل لتحميل الكائنات الثنائية كبيرة الحجم عمليات واجهة برمجة تطبيقات REST التالية:
- وضع كائن ثنائي كبير الحجم (واجهة برمجة تطبيقات REST)
- وضع كتلة (واجهة برمجة تطبيقات REST)
موارد وحدة العميل
(راجع أيضًا )
- إدارة بيانات Azure Blob والعثور عليها باستخدام علامات فهرس كائن ثنائي كبير الحجم
- استخدام علامات فهرسة الكائنات الثنائية كبيرة الحجم لإدارة البيانات والعثور عليها في مساحة تخزين Azure Blob
المحتوى ذو الصلة
- هذه المقالة هي جزء من دليل مطور Blob Storage ل Go. لمعرفة المزيد، راجع القائمة الكاملة لمقالات دليل المطور في إنشاء تطبيق Go.