В настоящее время я пытаюсь восстановить загрузку браузера на s3. здесь . Тем не менее, я всегда получаю сообщение об ошибке The authorization mechanism you have provided is not supported. Please use AWS4-HMAC-SHA256.
. Я нашел несколько ответов здесь, в StackOverflow, но никто, похоже, не делал этого только с помощью формы и Python, поэтому я все еще застрял с этой проблемой.
Это мой текущий HTML-код: (я подверг цензуре ключ доступа, подпись, политику и реальное ведро)
<html>
<head>
<title>S3 POST Form</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="https://some-bucket.s3.eu-central-1.amazonaws.com/" method="post" enctype="multipart/form-data">
<input type="hidden" name="key" value="uploads/${filename}"> <input type="hidden" name="AWSAccessKeyId" value="ACCESSKEY">
<input type="hidden" name="acl" value="private">
<input type="hidden" name="success_action_redirect" value="http://www.google.de">
<input type="hidden" name="policy" value="SOMEPOLICY">
<input type="hidden" name="signature" value="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>
Я заранее вычисляю политику и подпись с помощью скрипта на python: (снова скопировано из статьи, я просто установил срок действия с 2009 по 2019)
import base64
import hmac, hashlib
import json
policy_document = {"expiration": "2019-01-01T00:00:00Z", "conditions": [ {"bucket": "some-bucket/"}, ["starts-with", "$key", "uploads/"], {"acl": "private"}, {"success_action_redirect": "http://www.google.de"}, ["starts-with", "$Content-Type", ""], ["content-length-range", 0, 1048576]]}
s = json.dumps(policy_document)
policy = base64.b64encode(s.encode('utf-8'))
print('POLICY: ', policy)
key= 'ACCESSKEY'
signature = base64.b64encode(hmac.new(key.encode('utf-8'), policy, hashlib.sha256).digest())
print ('SIGNATURE: ', signature)
По сути, это именно тот код из статьи AWS , но я все еще получаю эту ошибку.
Как мне это исправить?