Ограничение размера объектов при загрузке на Amazon S3 с использованием предварительно подписанного URL-адреса
Я знаю ограничение размера выгрузки объекта с помощью этого метода: http://doc.s3.amazonaws.com/proposals/post.html#Limiting_Uploaded_Content
Но я хотел бы знать, как это можно сделать, создавая предварительно подписанный url, используя S3 SDK на стороне сервера в качестве пользователя IAM.
Этот URL из SDK не имеет такого параметра в параметрах: http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#putObject-property
Ни в этом:
http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/S3.html#getSignedUrl-property
Обратите внимание: я уже знаю об этом ответе: AWS S3 Предварительно подписанная длина URL-адреса, и это НЕ то, что я ищу.
Ответы
Ответ 1
Возможно, вы не сможете ограничить размер загрузки контента ex-ante, особенно учитывая POST
и Multi-Part
uploads. Вы можете использовать AWS Lambda
для создания решения ex-post. Вы можете настроить функцию Lambda
для получения уведомлений из ведра S3
, проверить функцию размера объекта и удалить функцию или выполнить другое действие.
Вот некоторые документы по
Обработка событий Amazon S3 с использованием AWS Lambda.
Ответ 2
Протокол подписания V4 предлагает возможность включать произвольные заголовки в подпись. Видеть:
http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-query-string-auth.html
Итак, если вы заранее знаете точный Content-Length, вы можете включить это в подписанный URL. Основываясь на некоторых экспериментах с CURL, S3 будет обрезать файл, если вы отправляете больше, чем указано в заголовке Content-Length. Вот пример подписи V4 с несколькими заголовками в подписи
http://docs.aws.amazon.com/general/latest/gr/sigv4-add-signature-to-request.html