Да, S3 принимает загрузки с помощью специально созданных и предварительно авторизованных форм HTML POST.Вы можете включить эти формы в любую веб-страницу, чтобы посетители вашего сайта могли отправлять вам файлы, используя обычный веб-браузер.
Посмотрите на S3 POST Upload
Подводя итог, речь идет о создании такой формы:
<html>
<head>
<title>S3 POST Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="https://s3-bucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
<input type="hidden" name="key" value="uploads/${filename}"> <input type="hidden" name="AWSAccessKeyId" value="YOUR_AWS_ACCESS_KEY">
<input type="hidden" name="acl" value="private">
<input type="hidden" name="success_action_redirect" value="http://localhost/">
<input type="hidden" name="policy" value="YOUR_POLICY_DOCUMENT_BASE64_ENCODED">
<input type="hidden" name="signature" value="YOUR_CALCULATED_SIGNATURE">
<input type="hidden" name="Content-Type" value="image/jpeg">
<!-- Include any additional input fields here -->
File to upload to S3: <input name="file" type="file">
<br>
<input type="submit" value="Upload File to S3">
</form>
</body>
</html>
Затем добавьте документ политики
S3 POST формы включают в себя документ политики, который авторизует формуи накладывает ограничения на файлы, которые могут быть загружены.Когда S3 получает файл через форму POST, он проверяет документ политики и подпись, чтобы подтвердить, что форма была создана кем-то, кому разрешено хранить файлы в целевой учетной записи S3.
{"expiration": "2009-01-01T00:00:00Z",
"conditions": [
{"bucket": "s3-bucket"},
["starts-with", "$key", "uploads/"],
{"acl": "private"},
{"success_action_redirect": "http://localhost/"},
["starts-with", "$Content-Type", ""],
["content-length-range", 0, 1048576]
]
}
И, наконец, подпишите ваши запросы POST
Чтобы заполнить форму POST S3, вы должны подписать ее, чтобы доказать S3, что вы действительно создали форму.Если вы не подпишете форму должным образом или кто-то другой попытается изменить вашу форму после того, как она была подписана, служба не сможет авторизовать ее и отклонит загрузку.
import base64
import hmac, hashlib
policy = base64.b64encode(policy_document)
signature = base64.b64encode(hmac.new(AWS_SECRET_ACCESS_KEY, policy, hashlib.sha1).digest())