Доступ к файлам в облачном хранилище с помощью абстракции ресурсов Spring.

1. Обзор

Spring Framework предоставляет абстракцию ResourceLoader для легкого чтения и записи файлов из различных источников, таких как файловая система, путь к классам или Интернет. Вам просто нужно указать URI ресурса, используя известный префикс протокола. Например, чтобы получить доступ к файлу в локальной файловой системе, вы должны указать URI, например file:/data/config.yaml .

Вы напишете приложение Spring Boot, которое будет получать доступ к файлам, хранящимся в облачном хранилище, используя абстракцию Spring Resource и префикс протокола gs:

Вы сделаете это с помощью Cloud Shell и инструмента командной строки Cloud SDK gcloud.

Что вы узнаете

  • Как использовать стартер Cloud Storage Spring Boot
  • Как получить доступ к файлам в облачном хранилище с помощью Spring
  • Как использовать абстракции 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 , среду командной строки, работающую в Google Cloud.

Активировать Cloud Shell

  1. В Cloud Console нажмите «Активировать Cloud Shell». H7JlbhKGHITmsxhQIcLwoe5HXZMhDlYue4K-SPszMxUxDjIeWfOHBfxDHYpmLQTzUmQ7Xx8o6OJUlannQF0iBuUyfp1RzVad_4nCa0Zz5LtwBlUZFXFCWFrmrWZLqg1MkZz2LdgUDQ .

zlNW0HehB_AFW1qZ4AyebSQUdWm95n7TbnOr7UVm3j9dFcg6oWapJRlC0jnU1Mvb-IQp-trP1Px8xKNwt6o3pP6fyih947sEhOFI4IRF0W7WZk6hFqZDUGXQQXrw21GuMm2ecH rbzQ

Если вы никогда раньше не запускали 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 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. Прочтите файл в облачном хранилище.

Измените приложение Spring Boot, чтобы получить доступ к my-file.txt файлу, который вы ранее сохранили в облачном хранилище. Ваша цель — просто вернуть содержимое файла через HTTP.

В следующих инструкциях вы будете использовать Vim для редактирования файлов, но вы также можете использовать Emacs, GNU Nano или встроенный редактор кода в Cloud Shell:

облако-редактор.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. Запишите в файл в облачном хранилище.

Вы читаете содержимое файла в облачном хранилище и предоставляете его через контроллер Spring REST. Теперь измените содержимое файла, отправив новое содержимое файла в ту же конечную точку HTTP.

Вам нужно добавить в GcsController еще один метод, который будет отвечать на HTTP POST и записывать данные в ваш файл в облачном хранилище. На этот раз примените 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 для простого доступа к файлам в облачном хранилище. Вы написали веб-приложение Spring Boot, которое может читать и записывать файлы в облачном хранилище. Вы также узнали о стартовой программе Spring Boot для Cloud Storage, которая обеспечивает эту функциональность.

Узнать больше

Лицензия

Эта работа распространяется под лицензией Creative Commons Attribution 2.0 Generic License.