Мне нужно загрузить большие (1+ gb) файлы на S3 из браузера пользователя. Отправка их через сервер приложений (PHP) просто не является вариантом из-за ограничений по размеру и нагрузке.Как использовать AWS Signature Version 4 с AWS Javascript SDK для загрузки на S3 из браузера?
Я хотел бы использовать AWS Javascript SDK, чтобы сделать это, как показано здесь: http://docs.aws.amazon.com/AWSJavaScriptSDK/guide/browser-examples.html#Uploading_a_local_file_using_the_File_API
Проблема есть, Javascript SDK только (официально) перечисляет несколько методов аутентификации, и не ясно, как вы можете использовать SDK «AWS Подпись V4» аутентификации, как показано здесь: http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html
Возникает вопрос: можно ли использовать «Подпись V4» с «AWS JS SDK»?
Редактировать: Похоже, возможно, мне нужно использовать «службу токена безопасности»: http://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html Может ли кто-нибудь подтвердить, что это правильный путь?
Дополнительные сведения, которые могут иметь отношение к делу: Мой прецедент находится в административной области интернет-магазина, где пользователь admin уже аутентифицирован путем входа в раздел администратора, но все же не должен видеть мастер Секретный ключ AWS. AWS JS SDK позволяет выполнять аутентификацию с помощью Facebook или других поставщиков идентификаторов, но это было бы странным опытом пользователя, так как администратор уже выполнил вход в систему.
Поскольку эта функциональность должна быть упакована в один модуль для установки в электронной коммерции (Magento), не представляется возможным попросить установщика также перейти и создать новую роль IAM с отдельными учетными данными только для функции uploader.
Если я не могу использовать AWS SDK, ваше решение, кажется, следующий самый элегантный. Является ли назначенный URL хорошим только для одного конкретного файла? Если это так, это означает, что для получения заданного URL-адреса требуется дополнительный HTTP-запрос, прежде чем он сможет фактически загрузить. Возможно ли это сделать на стороне сервера, используя AWS PHP SDK? К сожалению, у меня нет серверной части node.js, поэтому я могу использовать только части Minio-js на стороне клиента. Я бы предпочел не использовать собственный код генератора ключей. – Eric
@ Эрик - другой способ - это назначитьPostPolicy - http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html https://github.com/minio/minio-js /blob/master/examples/presigned-postpolicy.js С помощью вашей HTML-формы вы можете загрузить много объектов по заранее определенному пути, который уже предварительно разрешен. – Harshavardhana
Все, что я прочитал, указывает, что ключ содержимого и объект (aka, filename) являются частью назначенного URL-адреса. Это означает, что для каждой загрузки файла потребуется новый назначенный URL-адрес, что означает еще один HTTP-запрос на сервер приложений (в дополнение к фактическому запросу на отправку на S3.) Это также означает, что я не могу использовать SDK AWS JS, который будет автоматически разбивать загрузку на более мелкие куски, изящно продолжать сетевые ошибки, предоставлять события для загрузки файлов и т. д. Есть ли что-то, что я пропускаю или неправильно понимаю? – Eric