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

1. نظرة عامة

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

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

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

المواضيع التي ستتعرّف عليها

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

المتطلبات

  • مشروع على 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. في هذه المرة، عليك تحويل Spring 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 التي تتيح هذه الوظيفة.

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

الترخيص

يخضع هذا العمل للرخصة العامة Creative Commons Attribution 2.0.