التدريب - تحميلات الكائن الثنائي كبير الحجم وتنزيلاته
للتفاعل مع الكائنات الثنائية كبيرة الحجم الفردية في موقع تخزين الكائنات الثنائية كبيرة الحجم، استخدم عنصر BlobClient
. يمكنك الحصول على BlobClient
من خلال طلبه باسم الكائن الثنائي كبير الحجم من BlobContainerClient
حيث يوجد الكائن الثنائي كبير الحجم. BlobClient
لديه أساليب لتحميل وتنزيل وإدارة الكائنات الثنائية كبيرة الحجم الفردية في موقع تخزين الكائنات الثنائية كبيرة الحجم.
الحصول على عنصر BlobClient
للحصول على BlobClient
بالاسم، قم باستدعاء أساليب GetBlobClient
على BlobContainerClient
التي تحتوي على الكائن الثنائي كبير الحجم، باستخدام اسم الكائن الثنائي كبير الحجم. يسمح لك عنصر BlobClient
بالتفاعل مع الكائن الثنائي كبير الحجم عن طريق تحميل الكائن الثنائي كبير الحجم أو تنزيله أو إدارته في تخزين Blob Storage.
نقل البيانات من وإلى كائن ثنائي كبير الحجم هي عملية شبكة تستغرق وقتا. توفر SDK في موقع تخزين Azure Storage من أجل .NET تنفيذا غير متزامن لكافة الأساليب التي تتطلب نشاط شبكة الاتصال. نوصي باستخدام هذه التنفيذات غير المتزامنة كلما أمكن ذلك في تطبيقك.
نوصي باستخدام التدفقات بدلا من بنيات في الذاكرة مثل صفائف البايت أو السلاسل عند العمل مع كائنات بيانات كبيرة. يتجنب هذا الأسلوب تخزين المحتوى الكامل في الذاكرة مؤقتا قبل إرساله إلى الهدف. ASP.NET Core يدعم القراءة والكتابة تيارات من الطلبات والردود.
للحصول على BlobClient
بالاسم، قم باستدعاء أساليب getBlobClient
على BlobContainerClient
التي تحتوي على الكائن الثنائي كبير الحجم، باستخدام اسم الكائن الثنائي كبير الحجم. يسمح لك عنصر BlobClient
بالتفاعل مع الكائن الثنائي كبير الحجم عن طريق تحميل الكائن الثنائي كبير الحجم أو تنزيله أو إدارته في تخزين Blob Storage.
نوصي باستخدام التدفقات بدلا من بنيات في الذاكرة مثل صفائف البايت أو السلاسل عند العمل مع كائنات بيانات كبيرة. يتجنب هذا الأسلوب تخزين المحتوى الكامل في الذاكرة مؤقتا قبل إرساله إلى الهدف.
إنشاء الكائنات الثنائية كبيرة الحجم الجديدة
لإنشاء كائن ثنائي كبير الحجم جديد، قم باستدعاء إحدى الطرق Upload
على مرجع إلى كائن ثنائي كبير الحجم غير موجود في التخزين. يقوم هذا الأسلوب بأمرين: إنشاء الكائن الثنائي كبير الحجم في التخزين وتحميل البيانات.
BlobClient blobClient = containerClient.GetBlobClient(name);
var response = blobClient.UploadAsync(fileStream);
لإنشاء كائن ثنائي كبير الحجم جديد، قم باستدعاء إحدى الطرق upload
على مرجع إلى كائن ثنائي كبير الحجم غير موجود في التخزين. يقوم هذا الأسلوب بأمرين: إنشاء الكائن الثنائي كبير الحجم في التخزين، وتحميل البيانات.
BlobClient blobClient = blobContainerClient.getBlobClient(name);
blobClient.upload(inputStream, contentLength);
تمرين
قم بإنهاء تطبيقك عن طريق إضافة رمز التحميل والتنزيل، ثم نشره في Azure App Service للاختبار.
Upload
لتحميل كائن ثنائي كبير الحجم، يمكنك تنفيذ BlobStorage.Save
الأسلوب . أولا، يمكنك الحصول على كائن BlobClient
يمثل الكائن الثنائي كبير الحجم عن طريق استدعاء GetBlobClient
على BlobContainerClient
. ثم استخدم الأسلوب على UploadAsync
BlobClient
لحفظ البيانات التي Stream
تم تمريرها إلى هذا الأسلوب حتى Blob Storage.
في المحرر، في
BlobStorage.cs
، استبدلSave
بالتعليمات البرمجية التالية. استخدم CTRL+S لحفظ عملك.public Task Save(Stream fileStream, string name) { BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString); // Get the container (folder) the file will be saved in BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName); // Get the Blob Client used to interact with (including create) the blob BlobClient blobClient = containerClient.GetBlobClient(name); // Upload the blob return blobClient.UploadAsync(fileStream); }
إشعار
التعليمة البرمجية للتحميل المستندة إلى الدفق المعروضة هنا أكثر فعالية من قراءة الملف في صفيف بايت قبل إرساله إلى Blob Storage. ومع ذلك، فإن تقنية ASP.NET Core
IFormFile
التي تستخدمها للحصول على الملف من العميل ليست تنفيذ تدفق حقيقي من طرف إلى طرف. وهو مناسب فقط لمعالجة تحميلات الملفات الصغيرة.
لتحميل كائن ثنائي كبير الحجم، يمكنك تنفيذ BlobStorage.save
الأسلوب . أولا، يمكنك الحصول على كائن BlobClient
يمثل الكائن الثنائي كبير الحجم عن طريق استدعاء getBlobClient
على BlobContainerClient
. ثم استخدم الأسلوب على upload
BlobClient
لحفظ البيانات التي InputStream
تم تمريرها إلى هذا الأسلوب حتى Blob Storage.
في المحرر، في
BlobStorage.java
، استبدلsave
بالتعليمات البرمجية التالية.public void save(String name, InputStream inputStream, long contentLength) { BlobClient blobClient = blobContainerClient.getBlobClient(name); blobClient.upload(inputStream, contentLength); }
تنزيل
لتنزيل ملف، يتم إرجاع الأسلوب OpenReadAsync
على العنصر BlobClient
. يقوم هذا الأسلوب بإرجاع Stream
، ما يعني أن التعليمات البرمجية الخاصة بك لا تحتاج إلى تحميل كافة وحدات البايت من Blob Storage في وقت واحد. تحتاج فقط إلى إرجاع مرجع إلى دفق الكائن الثنائي كبير الحجم، والذي يمكن ASP.NET Core استخدامه لدفق الملف إلى المتصفح.
استبدل
Load
مع هذه التعليمة البرمجية واحفظ عملك باستخدام CTRL + S.public Task<Stream> Load(string name) { BlobServiceClient blobServiceClient = new BlobServiceClient(storageConfig.ConnectionString); // Get the container the blobs are saved in BlobContainerClient containerClient = blobServiceClient.GetBlobContainerClient(storageConfig.FileContainerName); // Get a client to operate on the blob so we can read it. BlobClient blobClient = containerClient.GetBlobClient(name); return blobClient.OpenReadAsync(); }
لتنزيل ملف، استخدم طريقة openInputStream
الموجودة على BlobClient
. يقوم هذا الأسلوب بإرجاع InputStream
، ما يعني أن التعليمات البرمجية الخاصة بك لا تحتاج إلى تحميل كافة وحدات البايت من Blob Storage في وقت واحد. تحتاج فقط إلى إرجاع مرجع إلى دفق الكائن الثنائي كبير الحجم، والذي IndexBean
يمكن استخدامه لدفق المحتوى إلى المتصفح.
استبدل read
بهذه التعليمة البرمجية واحفظ عملك.
public InputStream read(String name) {
BlobClient blobClient = blobContainerClient.getBlobClient(name);
return blobClient.openInputStream();
}
النشر والتشغيل في Azure
تم الانتهاء من تطبيقك. انشره وشاهده يعمل.
قم بإنشاء تطبيق App Service وتكوينه مع إعدادات التطبيق لسلسلة اتصال حساب التخزين واسم الحاوية. احصل على سلسلة الاتصال حساب التخزين مع
az storage account show-connection-string
، وقم بتعيين اسم الحاوية ليكونfiles
.يجب أن يكون اسم التطبيق فريدا عالميا. اختر اسمك الخاص لملء
<your-unique-app-name>
. استخدم اسم حساب التخزين الذي أنشأته سابقا لاستبدال<your-unique-storage-account-name>
. قم بتشغيل كل أمر من الأوامر التالية بالترتيب في Azure CLI:az appservice plan create \ --name blob-exercise-plan \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --sku FREE --location eastus
az webapp create \ --name <your-unique-app-name> \ --plan blob-exercise-plan \ --resource-group "<rgn>[sandbox resource group name]</rgn>"
CONNECTIONSTRING=$(az storage account show-connection-string \ --name <your-unique-storage-account-name> \ --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --output tsv)
az webapp config appsettings set \ --name <your-unique-app-name> --resource-group "<rgn>[sandbox resource group name]</rgn>" \ --settings AzureStorageConfig:ConnectionString=$CONNECTIONSTRING AzureStorageConfig:FileContainerName=files
انشر تطبيقك. تنشر الأوامر التالية الموقع إلى مجلد pub ، وتضغطه في site.zip، وتنشر الرمز البريدي إلى App Service.
إشعار
تأكد من أن shell الخاص بك لا يزال في دليل mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start قبل تشغيل الأوامر التالية. يمكنك استخدام
cd mslearn-store-data-in-azure/store-app-data-with-azure-blob-storage/src/start
لتغيير الدليل إلى هذا الموقع.dotnet publish -o pub cd pub zip -r ../site.zip *
az webapp deployment source config-zip \ --src ../site.zip \ --name <your-unique-app-name> \ --resource-group "<rgn>[sandbox resource group name]</rgn>"
لمشاهدة التطبيق قيد التشغيل، في مستعرض، افتح
https://<your-unique-app-name>.azurewebsites.net
. من المفترض أن تبدو مثل الصورة التالية.حاول تحميل بعض الملفات وتنزيلها لاختبار التطبيق. بعد تحميل بعض الملفات، لمشاهدة الكائنات الثنائية كبيرة الحجم في الحاوية، قم بتشغيل التعليمات البرمجية التالية في shell. استبدل
<your-unique-storage-account-name>
باسم حساب التخزين الذي قمت بإنشائه سابقا في الوحدة النمطية:az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table
تم الانتهاء من تطبيقك. انشره وشاهده يعمل. استخدم المكون الإضافي Maven ل Azure App Service لإنشاء تطبيق App Service وتكوينه ونشره.
في المحرر، افتح الملف pom.xml وأضف ما يلي
plugins
ضمنbuild
علامة xml.<plugins> <plugin> <groupId>com.microsoft.azure</groupId> <artifactId>azure-webapp-maven-plugin</artifactId> <version>2.3.0</version> <configuration> <schemaVersion>v2</schemaVersion> <subscriptionId>${env.AZ_SUBSCRIPTION_ID}</subscriptionId> <resourceGroup>${env.AZ_RESOURCE_GROUP}</resourceGroup> <appName>${env.AZ_APP_NAME}</appName> <pricingTier>${env.AZ_PRICING_TIER}</pricingTier> <region>${env.AZ_REGION}</region> <runtime> <os>Linux</os> <javaVersion>Java 11</javaVersion> <webContainer>Tomcat 9.0</webContainer> </runtime> <deployment> <resources> <resource> <directory>${project.basedir}/target</directory> <includes> <include>*.war</include> </includes> </resource> </resources> </deployment> <appSettings> <property> <name>STORAGE_CONNECTION_STRING</name> <value>${env.AZ_STORAGE_CONNECTION_STRING}</value> </property> <property> <name>STORAGE_CONTAINER_NAME</name> <value>${env.AZ_STORAGE_CONTAINER_NAME}</value> </property> </appSettings> </configuration> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>3.3.2</version> </plugin> </plugins>
تقوم الأوامر التالية بإعداد متغيرات البيئة لـ Maven Plugin لخدمة تطبيقات Azure. استخراج سلسلة الاتصال حساب التخزين باستخدام
az storage account show-connection-string
، ومعرف الاشتراك معaz account show
، وتعيين المنطقة والتسعير واسم الحاوية واسم التطبيق. يجب أن يكون اسم التطبيق فريدا عالميا. اختر اسمك الخاص لملء<your-unique-app-name>
.export AZ_SUBSCRIPTION_ID=$(az account show --query id --output tsv) export AZ_RESOURCE_GROUP="<rgn>[sandbox resource group name]</rgn>" export AZ_REGION=eastus export AZ_APP_NAME=<your-unique-app-name> export AZ_PRICING_TIER=F1 export AZ_STORAGE_CONNECTION_STRING=$(az storage account show-connection-string --name <your-unique-storage-account-name> --output tsv) export AZ_STORAGE_CONTAINER_NAME=files
تلميح
الحد الأدنى الموصى به لتوزيع تطبيقات Java في العالم الحقيقي هو أي خطة خدمة Premium V2.
انشر تطبيقك. ينشئ الأمر التالي التطبيق في ROOT.war وينشر ملف WAR إلى App Service. يقوم المكون الإضافي Maven ل Azure App Service بتوفير الموارد في محاولة التوزيع الأولى.
إشعار
تأكد من أن shell الخاص بك لا يزال في دليل mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start قبل تشغيل الأوامر التالية. يمكنك استخدام
cd mslearn-store-data-in-azure/store-java-ee-application-data-with-azure-blob-storage/start
لتغيير الدليل إلى هذا الموقع.mvn clean package azure-webapp:deploy
لمشاهدة التطبيق قيد التشغيل، في مستعرض، افتح
https://<your-unique-app-name>.azurewebsites.net
. من المفترض أن تبدو مثل الصورة التالية.تلميح
تستخدم هذه الوحدة المكون الإضافي من Maven ل Azure App Service لنشر التطبيق على Tomcat 9 على Azure App Service. للتعرف على الخيارات الأخرى، راجع قسم القراءة الإضافية في نهاية هذه الوحدة النمطية.
حاول تحميل بعض الملفات وتنزيلها لاختبار التطبيق. بعد تحميل بعض الملفات، لمشاهدة الكائنات الثنائية كبيرة الحجم في الحاوية، قم بتشغيل التعليمات البرمجية التالية في shell.
az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table