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

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

لمحة عن هذا الدرس التطبيقي حول الترميز

subjectتاريخ التعديل الأخير: فبراير 10, 2020
account_circleتأليف: meltsufin

1. نظرة عامة

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

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

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

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

  • كيفية استخدام Cloud Starter Spring Starter
  • كيفية الوصول إلى الملفات في Cloud Storage باستخدام Spring
  • كيفية استخدام الملخّصات للربيع Resource وWritableResource

المتطلبات اللازمة

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

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

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

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

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

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

إذا لم يكن لديك حساب على Google (Gmail أو Google Apps)، يجب إنشاء حساب. تسجيل الدخول إلى وحدة تحكُّم Google Cloud Platform (console.cloud.google.com) وإنشاء مشروع جديد:

لقطة شاشة من 2016-02-10 الساعة 12:45:26.png

عذرًا! وسيُشار إليه لاحقًا في هذا الدرس التطبيقي بعنوان PROJECT_ID.

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

من المفترض ألا يكلفك العمل على هذا الدرس التطبيقي أكثر من بضعة دولارات، ولكن قد يترتّب عليك أكثر إذا قررت استخدام المزيد من الموارد أو إذا تركتها قيد التشغيل (راجع قسم "عرض الأسعار التقديري" في نهاية هذا المستند).

يكون المستخدمون الجدد لخدمة Google Cloud Platform مؤهَّلين للاستفادة من فترة تجريبية مجانية تبلغ 300 دولار أمريكي.

Cloud Shell

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

تفعيل Google Cloud Shell

من وحدة تحكّم Google Cloud Platform، انقر على رمز Cloud Shell في شريط الأدوات العلوي الأيسر:

ثم انقر على "بدء Cloud Shell":

ينبغي ألا تستغرق إدارة الحسابات والاتصال بالبيئة أكثر من بضع لحظات.

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

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

شغِّل الأمر التالي في Cloud Shell لتأكيد أنّك تمت مصادقته:

gcloud auth list

مخرجات الأوامر

Credentialed accounts:
 - <myaccount>@<mydomain>.com (active)
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 Kiosk

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

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

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

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

$ cd spring-gcs

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

$ ./mvnw spring-boot:run

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

$ curl localhost:8080

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

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

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

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

$ 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.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GcsController {

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

 
@RequestMapping(value = "/", method = RequestMethod.GET)
 
public String readGcsFile() throws IOException {
   
return StreamUtils.copyToString(
        gcsFile
.getInputStream(),
       
Charset.defaultCharset()) + "\n";
 
}
}

إنشاء التطبيق وتشغيله باستخدام 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;

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

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

@RestController
public class GcsController {
 
@RequestMapping(value = "/", method = RequestMethod.POST)
 
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 Kiosk يمكنه قراءة ملف وكتابته في Cloud Storage. وتعرّفت أيضًا على "بدء تشغيل الربيع" لخدمة Cloud Storage التي تمكّن هذه الوظيفة.

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

الترخيص

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