Rest API - выгрузка больших файлов на S3 с использованием предварительно подписанных URL-адресов и обновление бэкенда в случае успеха - PullRequest
0 голосов
/ 07 января 2019

Context

Я создаю API-интерфейсы REST без учета состояния для платформы на основе браузера, которая должна хранить некоторые пользовательские файлы. Эти файлы могут быть в ГБ.

Я использую AWS S3 для хранения. В прошлом для этого я использовал AWS SDK для маршрутизации загрузки файлов через сервер NodeJS (в основном - загрузка на сервер, загрузка сервера на S3).

Я пытаюсь выяснить, как улучшить его, используя предварительно подписанные URL-адреса. Я понимаю динамику и процесс получения предварительно назначенных URL-адресов и загрузки файла непосредственно на S3.

Я не могу использовать SQS или Lambda для запуска события, созданного объектом. Архитектура должна быть независимой от AWS.

Вопрос Простейшие потоки, которые мне нужны, довольно распространены -

  1. Пользователь -> Открывает профиль
  2. Кликов Загрузить фото
  3. Клиент отправляет запрос на / getSignedUrl
  4. Сервер Возвращает подписанный URL для имени / типа файла
  5. Клиент выполняет запрос PUT / POST, чтобы загрузить файл в подписанный URL
  6. Загрузка успешно завершена

После этого - мое понимание -

  1. Клиент сообщает серверу - Файл успешно загружен
  2. Сервер связывает URL-адрес S3 для фотографии с пользователем.

... и это моя проблема. Как безопасно связать успешно загруженный файл с пользователем на сервере?

Не уверен, что я пропустил. Это похоже на тривиальный вариант использования, но я не смог ничего найти по этому поводу.

1 Ответ

0 голосов
/ 07 января 2019

1 / Я думаю, что для аватара, вы должны установить его для публичного чтения. При создании подписанного URL для загрузки в

GET: /signed-upload-url

Вам необходимо установить изображение как общедоступное. После этого вы можете свободно взаимодействовать с изображением по прямой ссылке. Поскольку это аватар, поэтому вы можете сжать его, уменьшите размер изображения с помощью функции AWS Lambda.

2 / Если вы не хотите публичного чтения, вам нужно связаться с сервером, чтобы получить подписанный URL-адрес загрузки для взаимодействия с образом

GET: /signed-download-url
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...