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 метод для загрузки файла непосредственно из внешнего интерфейса.
Следите за мной в Мета
Ваше здоровье!!