نسخ كائن ثنائي كبير الحجم من عنوان URL لكائن مصدر باستخدام Go
توضح هذه المقالة كيفية نسخ كائن ثنائي كبير الحجم من عنوان URL للكائن المصدر باستخدام وحدة عميل Azure Storage ل Go. يمكنك نسخ كائن ثنائي كبير الحجم من مصدر داخل نفس حساب التخزين، أو من مصدر في حساب تخزين مختلف، أو من أي كائن يمكن الوصول إليه يتم استرداده عبر طلب HTTP GET على عنوان URL معين.
تستخدم أساليب مكتبة العميل المغطاة في هذه المقالة عمليات Put Blob From URL و Put Block From URL REST API. يفضل استخدام هذه الأساليب لسيناريوهات النسخ حيث تريد نقل البيانات إلى حساب تخزين ولديك عنوان URL للكائن المصدر. لعمليات النسخ حيث تريد جدولة غير متزامنة، راجع نسخ كائن ثنائي كبير الحجم بجدولة غير متزامنة باستخدام 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 From URL أو Put Block From URL.
حول نسخ الكائنات الثنائية كبيرة الحجم من عنوان 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 ل Go لتنفيذ عملية نسخ من عنوان URL للكائن المصدر.
يلتف الأسلوب التالي عملية Put Blob From URL REST API، وينشئ كتلة blob جديدة حيث تتم قراءة محتويات الكائن الثنائي كبير الحجم من عنوان URL معين:
يفضل هذا الأسلوب للسيناريوهات التي تريد فيها نقل البيانات إلى حساب تخزين ولديك عنوان URL للكائن المصدر.
بالنسبة للكائنات الكبيرة، قد تختار العمل مع كتل فردية. يلتف الأسلوب التالي عملية Put Block From URL REST API. ينشئ هذا الأسلوب كتلة جديدة ليتم الالتزام بها كجزء من كائن ثنائي كبير الحجم حيث تتم قراءة المحتويات من عنوان URL المصدر:
نسخ كائن ثنائي كبير الحجم من مصدر داخل Azure
إذا كنت تقوم بنسخ كائن ثنائي كبير الحجم من مصدر داخل Azure، يمكن التصريح بالوصول إلى الكائن الثنائي كبير الحجم المصدر عبر معرف Microsoft Entra (موصى به) أو توقيع وصول مشترك (SAS) أو مفتاح حساب.
يوضح مثال التعليمات البرمجية التالي سيناريو لنسخ كائن ثنائي كبير الحجم المصدر داخل Azure. في هذا المثال، نقوم أيضا بتعيين طبقة الوصول للكائن الثنائي كبير الحجم الوجهة لاستخدام Cool
بنية UploadBlobFromURLOptions .
func copyFromSourceURL(srcBlob *blockblob.Client, destBlob *blockblob.Client) {
// Set copy options
copyOptions := blockblob.UploadBlobFromURLOptions{
Tier: to.Ptr(blob.AccessTierCool),
}
// Copy the blob from the source URL to the destination blob
_, err := destBlob.UploadBlobFromURL(context.TODO(), srcBlob.URL(), ©Options)
handleError(err)
}
يوضح المثال التالي استخدام العينة:
// TODO: replace <storage-account-name> placeholders with actual storage account names
srcURL := "https://<src-storage-account-name>.blob.core.windows.net/"
destURL := "https://<dest-storage-account-name>.blob.core.windows.net/"
credential, err := azidentity.NewDefaultAzureCredential(nil)
handleError(err)
srcClient, err := azblob.NewClient(srcURL, credential, nil)
handleError(err)
destClient, err := azblob.NewClient(destURL, credential, nil)
handleError(err)
srcBlob := srcClient.ServiceClient().NewContainerClient("source-container").NewBlockBlobClient("source-blob")
destBlob := destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-1")
copyFromSourceURL(srcBlob, destBlob)
نسخ كائن ثنائي كبير الحجم من مصدر خارج Azure
يمكنك تنفيذ عملية نسخ على أي كائن مصدر يمكن استرداده عبر طلب HTTP GET على عنوان URL معين، بما في ذلك الكائنات التي يمكن الوصول إليها خارج Azure. يوضح مثال التعليمات البرمجية التالي سيناريو لنسخ كائن ثنائي كبير الحجم من عنوان URL لكائن مصدر يمكن الوصول إليه.
func copyFromExternalSource(srcURL string, destBlob *blockblob.Client) {
// Set copy options
copyOptions := blockblob.UploadBlobFromURLOptions{
Tier: to.Ptr(blob.AccessTierCool),
}
// Copy the blob from the source URL to the destination blob
_, err := destBlob.UploadBlobFromURL(context.TODO(), srcURL, ©Options)
handleError(err)
}
يوضح المثال التالي استخدام العينة:
externalURL := "<source-url>"
destBlob = destClient.ServiceClient().NewContainerClient("destination-container").NewBlockBlobClient("destination-blob-2")
copyFromExternalSource(externalURL, destBlob)
الموارد
لمعرفة المزيد حول نسخ الكائنات الثنائية كبيرة الحجم باستخدام مكتبة عميل Azure Blob Storage ل Go، راجع الموارد التالية.
نماذج التعليمات البرمجية
- عرض نماذج التعليمات البرمجية من هذه المقالة (GitHub)
عمليات واجهة برمجة تطبيقات REST
يحتوي Azure SDK for Go على مكتبات تستند إلى واجهة برمجة تطبيقات AZURE REST، مما يسمح لك بالتفاعل مع عمليات واجهة برمجة تطبيقات REST من خلال نماذج Go المألوفة. تستخدم أساليب مكتبة العميل التي تغطيها هذه المقالة عمليات واجهة برمجة تطبيقات REST التالية:
- وضع كائن ثنائي كبير الحجم من عنوان URL (واجهة برمجة تطبيقات REST)
- وضع حظر من عنوان URL (REST API)
موارد وحدة العميل
المحتوى ذو الصلة
- هذه المقالة هي جزء من دليل مطور Blob Storage ل Go. لمعرفة المزيد، راجع القائمة الكاملة لمقالات دليل المطور في إنشاء تطبيق Go.