Загрузка из браузера в S3 с использованием HTML POST-форм с подписью версии 4 - PullRequest
0 голосов
/ 29 октября 2018

В настоящее время я пытаюсь восстановить загрузку браузера на 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 , но я все еще получаю эту ошибку.

Как мне это исправить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...