التدريب - تحميلات الكائن الثنائي كبير الحجم وتنزيلاته

مكتمل

للتفاعل مع الكائنات الثنائية كبيرة الحجم الفردية في موقع تخزين الكائنات الثنائية كبيرة الحجم، استخدم عنصر 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. ثم استخدم الأسلوب على UploadAsyncBlobClient لحفظ البيانات التي 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. ثم استخدم الأسلوب على uploadBlobClient لحفظ البيانات التي 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

تم الانتهاء من تطبيقك. انشره وشاهده يعمل.

  1. قم بإنشاء تطبيق 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
    
  2. انشر تطبيقك. تنشر الأوامر التالية الموقع إلى مجلد 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. من المفترض أن تبدو مثل الصورة التالية.

    Screenshot of the FileUploader web app for C#.

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

  1. في المحرر، افتح الملف 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>
    
  2. تقوم الأوامر التالية بإعداد متغيرات البيئة لـ 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.

  3. انشر تطبيقك. ينشئ الأمر التالي التطبيق في 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. من المفترض أن تبدو مثل الصورة التالية.

    Screenshot of the FileUploader web app for Java.

    تلميح

    تستخدم هذه الوحدة المكون الإضافي من Maven ل Azure App Service لنشر التطبيق على Tomcat 9 على Azure App Service. للتعرف على الخيارات الأخرى، راجع قسم القراءة الإضافية في نهاية هذه الوحدة النمطية.

  4. حاول تحميل بعض الملفات وتنزيلها لاختبار التطبيق. بعد تحميل بعض الملفات، لمشاهدة الكائنات الثنائية كبيرة الحجم في الحاوية، قم بتشغيل التعليمات البرمجية التالية في shell.

    az storage blob list --account-name <your-unique-storage-account-name> --container-name files --query [].{Name:name} --output table