الوصول إلى الملفات في Cloud Storage باستخدام تجريد Spring Resource

1. نظرة عامة

يوفّر إطار عمل الربيع طريقة ResourceLoader لقراءة الملفات وكتابتها بسهولة من مصادر مختلفة، مثل نظام الملفات أو مسار الفئة أو الويب. تحتاج ببساطة إلى تحديد عنوان URI للمورد باستخدام بادئة البروتوكول المعروفة. على سبيل المثال، للوصول إلى ملف على نظام الملفات المحلي، يمكنك تحديد معرف موارد منتظم (URI) مثل file:/data/config.yaml.

ستكتب تطبيق Spring Boot الذي سيصل إلى الملفات المخزنة في Cloud Storage باستخدام تجريد Spring Resource وبادئة بروتوكول gs:.

ويمكنك إجراء ذلك باستخدام Cloud Shell وأداة سطر أوامر gcloud SDK للسحابة الإلكترونية.

المعلومات التي ستطّلع عليها

  • كيفية استخدام إجراء بدء التشغيل الربيعي في Cloud Storage
  • كيفية الوصول إلى الملفات في Cloud Storage من خلال Spring
  • كيفية استخدام صورتَي Resource وWritableResource في فصل الربيع

المتطلبات

  • مشروع على Google Cloud
  • متصفّح، مثل Google Chrome
  • الإلمام بأدوات تحرير النصوص القياسية في Linux، مثل Vim وEmacs وGNU Nano

كيف ستستخدم الدرس التطبيقي حول الترميز؟

للقراءة فقط قراءة التمارين وإكمالها

كيف تقيّم تجربتك في إنشاء تطبيقات ويب بتنسيق HTML وCSS؟

حديث متوسط بارع

ما هو تقييمك لتجربتك في استخدام خدمات Google Cloud؟

حديث متوسط بارع

2. الإعداد والمتطلبات

إعداد بيئة ذاتية

  1. سجِّل الدخول إلى Cloud Console وأنشِئ مشروعًا جديدًا أو أعِد استخدام مشروع حالي. (إذا لم يكن لديك حساب على Gmail أو G Suite، عليك إنشاء حساب.)

dMbN6g9RawQj_VXCSYpdYncY-DbaRzr2GbnwoV7jFf1u3avxJtmGPmKpMYgiaMH-qu80a_NJ9p2IIXFppYk8x3wyymZXavjglNLJJhuXieCem56H30hwXtd8PvXGpXJO9gEUDu3cZw

ci9Oe6PgnbNuSYlMyvbXF1JdQyiHoEgnhl4PlV_MFagm2ppzhueRkqX4eLjJllZco_2zCp0V0bpTupUSKji9KkQyWqj11pqit1K1faS1V6aFxLGQdkuzGp4rsQTan7F01iePL5DtqQ

8-tA_Lheyo8SscAVKrGii2coplQp2_D1Iosb2ViABY0UUO1A8cimXUu6Wf1R9zJIRExL5OB2j946aIiFtyKTzxDcNnuznmR45vZ2HMoK3o67jxuoUJCAnqvEX6NgPGFjCVNgASc-lg

يُرجى تذكُّر رقم تعريف المشروع، وهو اسم فريد في جميع مشاريع Google Cloud (سبق أن تم استخدام الاسم أعلاه ولن يكون مناسبًا لك). ستتم الإشارة إليها لاحقًا في هذا الدرس التطبيقي حول الترميز باسم PROJECT_ID.

  1. بعد ذلك، عليك تفعيل الفوترة في Cloud Console لاستخدام موارد Google Cloud.

إنّ تنفيذ هذا الدرس التطبيقي حول الترميز لن يكون مكلفًا أو مكلفًا على الإطلاق. احرص على اتّباع أي تعليمات في قسم "الحذف سريعًا". الذي يقدم لك نصائح حول كيفية إيقاف تشغيل الموارد حتى لا تتكبّد أي فواتير خارج نطاق هذا البرنامج التعليمي. يكون مستخدمو Google Cloud الجدد مؤهَّلون للانضمام إلى برنامج الفترة التجريبية المجانية التي تبلغ قيمتها 300 دولار أمريكي.

Cloud Shell

ستستخدم Cloud Shell، وهي بيئة سطر أوامر يتم تشغيلها في Google Cloud.

تفعيل Cloud Shell

  1. من Cloud Console، انقر على تفعيل Cloud Shell H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlANnQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ.

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWApJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecHrbzQ

إذا لم يسبق لك بدء تشغيل Cloud Shell، ستظهر لك شاشة وسيطة (الجزء السفلي غير المرئي من الصفحة) تصف ماهيتها. إذا كان الأمر كذلك، فانقر على متابعة (ولن تراه مرة أخرى مطلقًا). إليك ما تبدو عليه هذه الشاشة التي تُستخدم لمرة واحدة:

kEPbNAo_w5C_pi9QvhFwWwky1cX8hr_xEMGWySNIoMCdi-Djx9AQRqWn-__DmEpC7vKgUtl-feTcv-wBxJ8NwzzAp7mY65-fi2LJo4twUoewT1SUjd6Y3h81RG3rKIkqhoVlFR-G7w

من المفترَض أن تستغرق عملية إدارة الحسابات والاتصال بخدمة Cloud Shell بضع دقائق فقط.

pTv5mEKzWMWp5VBrg2eGcuRPv9dLInPToS-mohlrqDASyYGWnZ_SwE-MzOWHe76ZdCSmw0kgWogSJv27lrQE8pvA5OD6P1I47nz8vrAdK7yR1NseZKJvcxAZrPb8wRxoqyTpD-gbhA

يتم تحميل هذه الآلة الافتراضية مزوّدة بكل أدوات التطوير التي ستحتاج إليها. وتوفّر هذه الشبكة دليلاً رئيسيًا دائمًا بسعة 5 غيغابايت ويتم تشغيله في Google Cloud، ما يحسّن بشكل كبير من أداء الشبكة والمصادقة. يمكنك تنفيذ معظم عملك، إن لم يكن كلّه، في هذا الدرس التطبيقي حول الترميز باستخدام متصفّح أو جهاز Chromebook.

بعد الربط بخدمة Cloud Shell، من المفترض أن ترى أنّه قد تمت مصادقتك وأنّ المشروع معيّن سبق أن تم ضبطه على رقم تعريف مشروعك.

  1. شغِّل الأمر التالي في Cloud Shell لتأكيد مصادقتك:
gcloud auth list

مخرجات الأمر

 Credentialed Accounts
ACTIVE  ACCOUNT
*       <my_account>@<my_domain.com>

To set the active account, run:
    $ gcloud config set account `ACCOUNT`
gcloud config list project

مخرجات الأمر

[core]
project = <PROJECT_ID>

إذا لم يكن كذلك، يمكنك تعيينه من خلال هذا الأمر:

gcloud config set project <PROJECT_ID>

مخرجات الأمر

Updated property [core/project].

3- إنشاء ملف في Cloud Storage

بعد إطلاق Cloud Shell، يمكنك البدء في إنشاء الملفات ونقلها إلى Cloud Storage.

إنشاء ملف باسم my-file.txt:

$ echo "Hello World from GCS" > my-file.txt

بعد ذلك، يمكنك إنشاء حزمة فريدة جديدة في Cloud Storage ونقل الملف إليها باستخدام gsutil.

$ BUCKET=spring-bucket-$USER
$ gsutil makebucket gs://$BUCKET
$ gsutil copy my-file.txt gs://$BUCKET

انتقِل إلى متصفّح مساحة التخزين في Cloud Storage وتحقّق من توفّر الحزمة والملف فيها.

4. إعداد تطبيق Spring Boot

ابدأ في كتابة التطبيق باستخدام سطر الأوامر لإنشاء تطبيق Spring Boot جديد باستخدام Spring Initializr:

$ curl https://start.spring.io/starter.tgz \
  -d type=maven-project \
  -d dependencies=web,cloud-gcp-storage -d baseDir=spring-gcs | tar -xzvf -

تجدر الإشارة إلى أنّ أداة Initializr ستضيف تلقائيًا spring-boot-starter-web وspring-cloud-gcp-starter-storage إلى العناصر الاعتمادية الخاصة بك في pom.xml من تطبيق النموذج.

التغيير إلى دليل تطبيق النموذج:

$ cd spring-gcs

تأكَّد من ضبط JAVA_HOME على إصدار JDK الصحيح:

$ export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64/

أنشئ التطبيق وشغِّله باستخدام Maven.

$ ./mvnw spring-boot:run

سيبدأ التطبيق الاستماع عبر المنفذ 8080. افتح علامة تبويب جديدة في Cloud Shell وشغِّل curl للوصول إلى التطبيق.

$ curl localhost:8080

من المفترض أن تحصل على استجابة 404 لأن التطبيق لا يفعل أي شيء مفيد حتى الآن.

ارجع إلى علامة تبويب Cloud Shell السابقة التي يتم تشغيل التطبيق فيها واعمل على إنهائها باستخدام Control+C (Command+C على Macintosh).

5- قراءة الملف في Cloud Storage

يمكنك تعديل تطبيق Spring Boot للوصول إلى my-file.txt، وهو الملف الذي خزّنته في السابق على Cloud Storage. هدفك هو ببساطة عرض محتويات الملف عن طريق HTTP.

في التعليمات التالية، ستستخدم Vim لتعديل الملفات، ولكن يمكنك أيضًا استخدام Emacs أو GNU Nano أو أداة تعديل الرموز المضمَّنة في Cloud Shell:

cloud-editor.png

$ cd ~/spring-gcs

أضِف وحدة تحكُّم REST GcsController إلى التطبيق.

$ vi src/main/java/com/example/demo/GcsController.java

الصق الرمز التالي، ولا تنس إصلاح عنوان URI للمورد باستخدام الحزمة التي أنشأتها سابقًا. يمكنك التحقّق من الحزمة من خلال تنفيذ الأمر echo $BUCKET.

src/main/java/com/example/demo/GcsController.java

package com.example.demo;

import java.io.IOException;
import java.nio.charset.Charset;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.io.Resource;
import org.springframework.util.StreamUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GcsController {

  @Value("gs://REPLACE_WITH_YOUR_BUCKET/my-file.txt")
  private Resource gcsFile;

  @GetMapping("/")
  public String readGcsFile() throws IOException {
    return StreamUtils.copyToString(
        gcsFile.getInputStream(),
        Charset.defaultCharset());
  }
}

إنشاء التطبيق وتشغيله باستخدام Maven:

$ ./mvnw spring-boot:run

يبدأ التطبيق الاستماع عبر المنفذ 8080. افتح علامة تبويب جديدة في Cloud Shell وشغِّل curl للوصول إلى التطبيق.

$ curl localhost:8080

من المفترض أن ترى الآن محتوى الملف الذي تم عرضه من التطبيق. انتقِل إلى علامة تبويب Cloud Shell السابقة التي يتم تشغيل التطبيق فيها، واعمل على إنهائه باستخدام Control+C (Command+C على Macintosh).

6- الكتابة في الملف في Cloud Storage

تقرأ محتوى الملف في Cloud Storage وأظهرته من خلال وحدة تحكّم Spring REST. والآن، يمكنك تغيير محتوى الملف من خلال نشر محتوى الملف الجديد إلى نقطة نهاية HTTP نفسها.

يجب إضافة طريقة أخرى إلى GcsController للاستجابة إلى طلب HTTP POST وكتابة البيانات في ملفك في Cloud Storage. هذه المرة، بث ربيع Resource على "WritableResource".

يمكنك تعديل GcsController بعمليات استيراد إضافية تحتاجها.

src/main/java/com/example/demo/GcsController.java

import java.io.OutputStream;
import org.springframework.core.io.WritableResource;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.PostMapping;

أضف طريقة نقطة النهاية الجديدة إلى وحدة التحكم.

src/main/java/com/example/demo/GcsController.java

@RestController
public class GcsController {

  @PostMapping("/")
  String writeGcs(@RequestBody String data) throws IOException {
    try (OutputStream os = ((WritableResource) gcsFile).getOutputStream()) {
      os.write(data.getBytes());
    }
    return "file was updated\n";
  }
  ...
}

إنشاء التطبيق وتشغيله باستخدام Maven:

$ ./mvnw spring-boot:run

يبدأ التطبيق الاستماع عبر المنفذ 8080. يمكنك فتح علامة تبويب جديدة في Cloud Shell وتشغيل curl لنشر رسالة في التطبيق.

$ curl -d 'new message' -H 'Content-Type: text/plain' localhost:8080

من المفترض أن يظهر لك تأكيد بأنه تم تعديل محتوى الملف. ومع ذلك، يمكنك التحقق من ذلك من خلال إجراء GET.

$ curl localhost:8080

ومن المفترض أن يظهر لك المحتوى المعدّل للملف الذي يعرضه التطبيق. ارجع إلى علامة تبويب Cloud Shell السابقة التي يتم تشغيل التطبيق فيها واعمل على إنهائها باستخدام Control+C (Command+C على Macintosh).

7. تهانينا

لقد تعلمت استخدام تجريد Spring Resource للوصول إلى الملفات بسهولة في Cloud Storage. لقد كتبت تطبيق ويب Spring Boot يمكنه القراءة والكتابة إلى ملف في Cloud Storage. لقد تعرفت أيضًا على إجراء التفعيل لـ Spring Boot على Cloud Storage الذي يتيح هذه الوظيفة.

مزيد من المعلومات

الترخيص

هذا العمل مرخّص بموجب رخصة المشاع الإبداعي 2.0 مع نسب العمل إلى مؤلف عام.