स्प्रिंग रिसॉर्स ऐब्स्ट्रैक्ट की मदद से, Cloud Storage में फ़ाइलें ऐक्सेस करना

1. खास जानकारी

Spring Framework, अलग-अलग सोर्स से फ़ाइलों को आसानी से पढ़ने और लिखने के लिए ResourceLoader ऐब्स्ट्रैक्शन उपलब्ध कराता है. जैसे, फ़ाइल सिस्टम, क्लासपाथ या वेब. आपको सिर्फ़, जाने-माने प्रोटोकॉल प्रीफ़िक्स का इस्तेमाल करके, रिसॉर्स के यूआरआई की जानकारी देनी होगी. उदाहरण के लिए, लोकल फ़ाइल सिस्टम पर मौजूद किसी फ़ाइल को ऐक्सेस करने के लिए, आपको file:/data/config.yaml जैसा यूआरआई तय करना होगा.

आपको एक Spring Boot ऐप्लिकेशन लिखना होगा. यह Spring Resource abstraction और gs: प्रोटोकॉल प्रीफ़िक्स का इस्तेमाल करके, Cloud Storage में सेव की गई फ़ाइलों को ऐक्सेस करेगा.

इसके लिए, Cloud Shell और Cloud SDK gcloud कमांड-लाइन टूल का इस्तेमाल करें.

आपको क्या सीखने को मिलेगा

  • Cloud Storage Spring Boot starter का इस्तेमाल करने का तरीका
  • Spring की मदद से, Cloud Storage में मौजूद फ़ाइलों को ऐक्सेस करने का तरीका
  • Spring के Resource और WritableResource अबस्ट्रैक्शन का इस्तेमाल करने का तरीका

आपको इन चीज़ों की ज़रूरत होगी

  • Google Cloud प्रोजेक्ट
  • कोई ब्राउज़र, जैसे कि Google Chrome
  • Vim, Emacs, और GNU Nano जैसे स्टैंडर्ड Linux टेक्स्ट एडिटर के बारे में जानकारी होना

आपको इस कोडलैब का इस्तेमाल कैसे करना है?

सिर्फ़ पढ़ना एक्सरसाइज़ पढ़ना और उन्हें पूरा करना

एचटीएमएल और सीएसएस वेब ऐप्लिकेशन बनाने के अपने अनुभव को आप क्या रेटिंग देंगे?

शुरुआती सामान्य एडवांस

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. इसके बाद, Google Cloud संसाधनों का इस्तेमाल करने के लिए, आपको Cloud Console में बिलिंग चालू करनी होगी.

इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. "सफ़ाई करना" सेक्शन में दिए गए निर्देशों का पालन करना न भूलें. इसमें बताया गया है कि संसाधनों को कैसे बंद किया जाए, ताकि इस ट्यूटोरियल के बाद आपको बिलिंग न करनी पड़े. 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 का इस्तेमाल पहले कभी नहीं किया है, तो आपको एक इंटरमीडिएट स्क्रीन दिखेगी. यह स्क्रीन, फ़ोल्ड के नीचे दिखेगी. इसमें 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 Initializr की मदद से नया Spring Boot ऐप्लिकेशन जनरेट करें और ऐप्लिकेशन लिखना शुरू करें:

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

ध्यान दें कि Initializr, टेम्प्लेट ऐप्लिकेशन के pom.xml में आपकी डिपेंडेंसी में spring-boot-starter-web और spring-cloud-gcp-starter-storage को अपने-आप जोड़ देगा.

टेम्प्लेट ऐप्लिकेशन की डायरेक्ट्री पर जाएं:

$ 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 (Macintosh पर Command+C) का इस्तेमाल करके उसे बंद करें.

5. Cloud Storage में मौजूद फ़ाइल को पढ़ना

Cloud Storage में पहले से सेव की गई फ़ाइल my-file.txt को ऐक्सेस करने के लिए, अपने Spring Boot ऐप्लिकेशन में बदलाव करें. आपका लक्ष्य, एचटीटीपी के ज़रिए फ़ाइल का कॉन्टेंट वापस पाना है.

यहां दिए गए निर्देशों में, फ़ाइलों में बदलाव करने के लिए Vim का इस्तेमाल किया जाएगा. हालांकि, Emacs, GNU Nano या Cloud Shell में मौजूद कोड एडिटर का भी इस्तेमाल किया जा सकता है:

cloud-editor.png

$ cd ~/spring-gcs

ऐप्लिकेशन में REST कंट्रोलर GcsController जोड़ें.

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

नीचे दिया गया कोड चिपकाएं. साथ ही, संसाधन यूआरआई को उस बकेट से ठीक करना न भूलें जिसे आपने पहले बनाया था. 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 (Macintosh पर Command+C) का इस्तेमाल करके उसे बंद करें.

6. Cloud Storage में मौजूद फ़ाइल में लिखना

आपने Cloud Storage में मौजूद फ़ाइल का कॉन्टेंट पढ़ा और उसे Spring REST कंट्रोलर के ज़रिए दिखाया. अब, फ़ाइल के कॉन्टेंट को बदलें. इसके लिए, नई फ़ाइल के कॉन्टेंट को उसी एचटीटीपी एंडपॉइंट पर पोस्ट करें.

आपको GcsController में एक और तरीका जोड़ना होगा, जो एचटीटीपी 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 (Macintosh पर Command+C) का इस्तेमाल करके ऐप्लिकेशन को बंद करें.

7. बधाई हो!

आपने Cloud Storage में मौजूद फ़ाइलों को आसानी से ऐक्सेस करने के लिए, Spring Resource abstraction का इस्तेमाल करना सीखा. आपने Spring Boot वेब ऐप्लिकेशन लिखा है, जो Cloud Storage में मौजूद किसी फ़ाइल को पढ़ और उसमें बदलाव कर सकता है. आपने Cloud Storage के लिए Spring Boot starter के बारे में भी जाना. यह सुविधा को चालू करता है.

ज़्यादा जानें

लाइसेंस

इस काम के लिए, Creative Commons एट्रिब्यूशन 2.0 जेनेरिक लाइसेंस के तहत लाइसेंस मिला है.