Доступ к файлам в облачном хранилище с помощью абстракции Spring Resource
О практической работе
1. Обзор
Spring Framework предоставляет абстракцию ResourceLoader
для простого чтения и записи файлов из различных источников, таких как файловая система, путь к классам или Интернет. Вам просто нужно указать URI ресурса, используя общеизвестный префикс протокола. Например, чтобы получить доступ к файлу в локальной файловой системе, вы должны указать URI, например file:/data/config.yaml
.
Вы напишете приложение Spring Boot, которое будет обращаться к файлам, хранящимся в облачном хранилище, с помощью абстракции ресурсов Spring и префикса протокола gs:
Вы сделаете это с помощью Cloud Shell и инструмента командной строки Cloud SDK gcloud.
Что вы узнаете
- Как использовать стартер Spring Boot Cloud Storage
- Как получить доступ к файлам в облачном хранилище с помощью Spring
- Как использовать абстракции Spring
Resource
иWritableResource
Что вам понадобится
- Облачный проект Google
- Браузер, например Google Chrome
- Знакомство со стандартными текстовыми редакторами Linux, такими как Vim, Emacs и GNU Nano.
Как вы будете использовать лабораторию кода?
Как бы вы оценили свой опыт создания веб-приложений на HTML и CSS?
Как бы вы оценили свой опыт использования сервисов Google Cloud?
2. Настройка и требования
Самостоятельная настройка среды
Если у вас еще нет учетной записи Google (Gmail или Google Apps), вы должны создать ее. Войдите в консоль Google Cloud Platform ( console.cloud.google.com ) и создайте новый проект:
Запомните идентификатор проекта, уникальное имя для всех проектов Google Cloud (имя выше уже занято и не будет работать для вас, извините!). Позже в этой кодовой лаборатории он будет упоминаться как PROJECT_ID
.
Затем вам нужно включить выставление счетов в облачной консоли, чтобы использовать ресурсы Google Cloud.
Прохождение этой кодовой лаборатории не должно стоить вам больше нескольких долларов, но может стоить больше, если вы решите использовать больше ресурсов или оставите их работающими (см. раздел «Очистка» в конце этого документа).
Новые пользователи Google Cloud Platform имеют право на бесплатную пробную версию стоимостью 300 долларов США .
Облачная оболочка
Вы будете использовать Cloud Shell — среду командной строки, работающую в Google Cloud.
Активировать облачную оболочку Google
В консоли GCP щелкните значок Cloud Shell на верхней правой панели инструментов:
Затем нажмите «Запустить Cloud Shell»:
Подготовка и подключение к среде займет всего несколько минут:
Эта виртуальная машина загружена всеми необходимыми инструментами разработки. Он предлагает постоянный домашний каталог размером 5 ГБ и работает в облаке Google, что значительно повышает производительность сети и аутентификацию. Многое, если не все, из вашей работы в этом лабораторном занятии можно выполнить просто с помощью браузера или вашего 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 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 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
Создайте и запустите приложение с помощью 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:
$ 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. Запись в файл в облачном хранилище
Вы читаете содержимое файла в облачном хранилище и предоставляете его через контроллер 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;
Добавьте новый метод конечной точки в контроллер.
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 для простого доступа к файлам в облачном хранилище. Вы написали веб-приложение Spring Boot, которое может читать и записывать файл в облачном хранилище. Вы также узнали о стартере Spring Boot для облачного хранилища, который обеспечивает эту функциональность.
Учить больше
- Облачное хранилище
- Spring Cloud Облачный проект Google
- Spring в репозитории Google Cloud GitHub
- Java в облаке Google
Лицензия
Эта работа находится под лицензией Creative Commons Attribution 2.0 Generic License.