Случай пользователя: Клиент может загрузить файл из publi c REST api в наше хранилище S3, а затем мы можем обработать файл с помощью последующих служб.
После проведения некоторых исследований Я могу найти 3 способа сделать это:
- Загрузка с использованием типа файла OCTET-STREAM
- Загрузить файл с помощью запроса данных формы
- Загрузить файл используя предварительно подписанный URL-адрес
В первых двух случаях пользователь отправит двоичный файл, и мы загрузим файл на S3 после проверки файла.
В третьем способе пользователь должен нажать 3 apis. Первый API для получения предварительно подписанного URL-адреса S3, который предоставит пользователю доступ для загрузки файла на S3. При втором попадании пользователь загрузит файл на предварительно подписанный URL-адрес s3. После того как пользователь завершит загрузку, он отправит запрос на обработку файла.
У нас есть какие-либо проблемы с безопасностью на шаге 3? Так как пользователь может неправильно использовать предварительно подписанный URL с вредоносным файлом.
Какой из этих методов лучше всего подходит в соответствии с отраслевой практикой?
Детали каждого подхода:
1. Загрузка с использованием типа файла OCTET-STREAM
Плюсы:
- Этот метод удобен для загрузки типов файлов, которые можно открыть в некоторых приложениях, таких как xlsx.
- 1 Хит API. Прямая загрузка файлов
Минусы:
- Этот параметр не подходит для загрузки нескольких файлов. Если в будущем нам потребуется поддержка загрузки нескольких файлов, это следует изменить на multipart / form-data (A2).
- Метаданные не могут быть отправлены в качестве параметра тела. Метаданные можно отправлять в заголовках.
2. Загрузите файл с помощью запроса данных формы
Пользователь загрузит файл с запросом API, прикрепив его в виде составной формы.
Плюсы
- Мы можем отправлять несколько файлов одновременно.
- Мы можем отправлять дополнительные параметры в теле.
3. Загрузите файл, используя предварительно подписанный URL-адрес
Минусы
- Для загрузки файла клиенту нужно нажать 3 API. (2 попадания API для загрузки и затем еще одно попадание API для проверки процесса файла)