Я знаю, что было много внимания при загрузке в AWS S3. Тем не менее, я боролся с этим около 24 часов, и я не нашел ответа, который бы соответствовал моей ситуации.
Что я пытаюсь сделать
Загрузите файл в AWS S3 прямо из моего клиента в мой ведро S3. Ситуация такова:
- Это приложение с одной страницей, поэтому запрос на загрузку должен быть в AJAX
- Мой сервер и мой клиент не в том же домене
- Ведро S3 имеет самый новый тип (Франкфурт), для которого некоторые библиотеки, генерирующие подпись, не работают (см. ниже).
- Клиент находится в AngularJS
- Сервер находится в ExpressJS
Что я пробовал
- статья Heroku о прямой загрузке на S3. Не соответствует моей конфигурации клиент/сервер (плюс это действительно не гармонично сочетается с Angular)
- готовые директивы, такие как ng-s3upload. Не работает, потому что их алгоритм генерации сигнатур не принимается последними ведрами s3.
- Вручную создайте директиву загрузки и логику для клиента, как в этой статье (используя
FormData
и Angular$http
). Он состоял в получении подписанного URL-адреса от AWS на сервере (и эта часть работала), затем AJAX-загрузка на этот URL-адрес. Это не удалось с каким-то загадочным сообщением, связанным с CORS (хотя я установил конфигурацию CORS на Heroku)
Кажется, я столкнулся с двумя трудностями: с файлом, который работает в моем приложении с одной страницей, и с правильной обработкой рабочего процесса AWS.
Вид решения, которое я ищу
Если возможно, я бы хотел избежать "всех включенных" решений, которые управляют всем процессом, скрывая всю сложность, затрудняя адаптацию к особым случаям. У меня было бы довольно простое объяснение, разрушающее поток данных между различными задействованными компонентами, даже если это требует от меня больше сантехники.