Прямая загрузка s3, ограничивающая размер и тип файла

Вопрос новичка, но я немного погуглил и не нашел решения.

Я хочу разрешить пользователям напрямую загружать файлы на S3, а не через мой сервер. Таким образом, можно ли каким-либо образом проверить файлы на ограничение размера и разрешенные типы перед фактической загрузкой на S3? Желательно не использовать flash, а javascript.


person twb    schedule 15.11.2012    source источник


Ответы (3)


Если вы говорите о проблеме безопасности (люди загружают огромные файлы в вашу корзину), да, вы МОЖЕТЕ ограничить размер файла с помощью загрузки через браузер на S3.

Вот пример переменной «policy», где ключевой момент — «content-length-range».

"expiration": "'.date('Y-m-d\TG:i:s\Z', time()+10).'",
"conditions": [
    {"bucket": "xxx"},
    {"acl": "public-read"},
    ["starts-with","xxx",""],
    {"success_action_redirect": "xxx"},
    ["starts-with", "$Content-Type", "image/jpeg"],
    ["content-length-range", 0, 10485760]
]

В этом случае, если размер загружаемого файла > 10 МБ, запрос на загрузку будет отклонен Amazon.

Конечно, прежде чем начать процесс загрузки, вы должны использовать javascript, чтобы проверить размер файла и сделать несколько предупреждений, если это так.

получение размера файла в javascript

person stonyau    schedule 12.08.2014
comment
Дополнительные сведения о применении политики см. на странице aws.amazon.com/articles/1434. а также другие соображения. - person Trenton; 22.01.2015
comment
Политика является частью формы, установленной на стороне клиента. Если хакер достаточно умен, он может расшифровать вашу политику base64 и поместить в нее файл любого размера или типа. - person Kareem; 05.09.2017
comment
@Kareem Политический документ подписан, поэтому любое вмешательство приведет к сбою запроса. - person Jacob Krall; 21.09.2017
comment
Если быть более точным: вместе с политикой, которую вы отправляете вместе с подписью, которую вы вычислили, ключом для подписи является aws_secret_key, к которому у клиента нет доступа. Поэтому невозможно просто изменить политику, сохраняя при этом правильную подпись. - person luk2302; 11.06.2019
comment
Этот формат политики все еще действителен? Node aws-sdk выдает MalformedPolicy: Unknown field conditions, когда я пытаюсь передать эту политику s3.putBucketPolicy. - person SimpleJ; 15.09.2019
comment
Как мы можем ограничить тип файла? как тип контента? - person Ani; 11.12.2019
comment
Это решение правильное. Если кто-то хочет что-то более приятное, чем официальные документы, этот ресурс мне очень помог medium.com/@zaccharles/ - person nrmad; 09.11.2020

AWS написал руководство, объясняющее, как создавать HTML-формы POST, которые позволяют вашему веб-сайту посетителей загружать файлы в вашу учетную запись S3 с помощью стандартного веб-браузера. Он использует предварительно подписанные URL-адреса S3 для предотвращения несанкционированного доступа, и вы можете ограничить доступ по размеру файла.

person Trenton    schedule 22.01.2015
comment
Ссылка не работает. - person MJBZA; 04.02.2021
comment
я исправил ссылку - person Trenton; 04.03.2021

Чтобы сделать то, что вы хотите сделать, вам нужно будет загрузить через свой собственный веб-сервис. Это, вероятно, лучше в любом случае, так как предоставление глобального доступа для записи вашим конечным пользователям к вашей корзине S3 — это кошмар безопасности, не говоря уже о том, что ничто не помешает им загружать огромные файлы и поднимать ваши расходы.

person Mike Brant    schedule 15.11.2012