Rest API и использование предварительно подписанных URL-адресов

Если ваш проект имеет дело с файлами, вам понадобится хранилище для хранения этих файлов. и лучшее решение для этого приходит на ум s3. Amazon S3 — это сервис, предоставляемый AWS. S3 — это масштабируемое и надежное решение для хранения файлов.

В этой статье я покажу вам, как вы можете загружать файлы на s3 в своем проекте. Я предполагаю, что ваш проект весенней загрузки представляет собой микросервис, который предоставляет API-интерфейсы для вашего внешнего интерфейса.

Когда мы хотим загрузить файлы, есть 2 способа сделать это:

  • Первый способ заключается в том, что внешний интерфейс передает файл на ваш сервер через REST API, а затем вы вызываете s3 SDK, чтобы загрузить файл и вернуть результат обратно на внешний интерфейс.
  • И второй способ называется предварительно подписанными URL-адресами. Предварительно подписанныеURL-адреса — это URL-адреса с ограниченными разрешениями и сроком действия. любой клиент может использовать этот URL-адрес для размещения файла непосредственно в s3, не беспокоясь о ключе доступа AWS и секрете.

Если вы видите, в первом варианте файл идет на ваш сервер, а затем снова идет на s3 с вашего сервера. это увеличит задержку, потому что передача данных файла происходит дважды, и поэтому не рекомендуется использовать первый вариант. 2-й вариант — лучший выбор для загрузки файлов.

Давайте посмотрим, как мы можем это сделать.

  • Во-первых, мы создадим REST API, который будет вызывать наш интерфейс, и мы создадим предварительно подписанный URL-адрес с ограниченными разрешениями и вернемся обратно к интерфейсу.
  • Внешний интерфейс напрямую загрузит файл на s3.

Давайте добавим зависимость SDK к нашему pom.xml

Создайте новый класс конфигурации awsS3Config.java, где мы создадим bean-компонент для s3.

Убедитесь, что вы добавили access-key and secret-key в свой файл application.yml.

Теперь давайте создадим сервис, который будет взаимодействовать с AWS для операций s3.

В приведенном выше классе у нас есть generatePreSignedUrl, который принимает следующие параметры.

filePath: это ключ объекта для вашего s3, на который вы хотите загружать файлы.

bucketName : это имя корзины для вашей корзины s3.

httpMethod : это разрешенный HTTP-метод для предварительно подписанного URL-адреса. Здесь мы хотим загрузить файл, поэтому мы передадим его HttpMethod.PUT сюда.

Теперь давайте создадим конечную точку REST API в нашем контроллере.

Этот API вернет предварительно подписанный URL-адрес, который будет действителен в течение 10 минут и будет принимать только PUT метод для загрузки файла непосредственно из внешнего интерфейса.

Следите за мной в Мета

Ваше здоровье!!