Загрузка через браузер AWS с использованием POST - PullRequest
0 голосов
/ 19 апреля 2019

Я пытаюсь создать политику AWS POST и отправить запрос POST с шаблоном Flask для загрузки файла с помощью веб-браузера.

Я могу успешно открыть свой HTML-файл при открытии веб-страницы конечной точки.Однако, как только я отправляю свою форму, я получаю «Неверная последовательность кодов Unicode в поле» или «POST требует ровно одну загрузку файла на запрос».ошибка в зависимости от типа файла.

Мои гипотезы: я 1. создал неправильную политику 2. создал неправильную подпись 3. или оба из них

Я пытался много подходов, чтобы исправить это,но не могу понять это.Я использую Python3

'' '

<body>
    <h1>Upload VCF File</h1>

    <form id="upload_form" action="https://{{ bucket_name }}.s3.amazonaws.com/" method="post" enctype="multipart/form-data">

      <input type="hidden" name="key" value="{{ s3key }}">
      <input type="hidden" name="acl" value="{{ acl }}">
      <input type="hidden" name="AWSAccessKeyId" value="{{ aws_key }}">
      <input type="hidden" name="acl" value="{{ acl }}">
      <input type="hidden" name="policy" value="{{ policy }}">
      <input type="hidden" name="x-amz-signature" value="{{ signature }}">
     Select input file: <input id="upload_file" type="file" name="file" />

      <input type="submit" value="Upload Input File" />
    </form>
  </body>

' ''

Это мой Python-файл, основанный на Flask '' '

@app.route('/annotate', methods=['GET'])
# This method is called when a user see "/annotate" on your server.
def annotate():
    #Define S3 policy fields and conditions
    s3 = boto3.client('s3')
    bucket_namee = 'gas-inputs'

    now = datetime.datetime.now()
    exptime = now + datetime.timedelta(minutes=15)
    exptime_ = exptime.strftime('%Y-%m-%dT%H:%M:%S.000Z')
    datelong = datetime.datetime.utcnow().strftime('%Y%m%dT000000Z')
    AWS_SECRET_ACCESS_KEY = '<secret key>'

    today = datetime.date.today().strftime("%Y%m%d")
    s3keyy = '/jhwang11/${filename}' 
    aws_keyy = '<key>'
    acll = "public-read"

    #Create Policy
    bucket_policy = { "expiration": str(exptime_),
        "conditions": [
        {"acl": acll },
        {"bucket": bucket_namee },
        ["starts-with", "$key", s3keyy],
        {"x-amz-credential":'<AWS Key>/{}/us-east-1/s3/aws4_request'.format(today)},
        {"x-amz-algorithm": "AWS4-HMAC-SHA256"},
        {"x-amz-date":datelong}

      ]
    }

    bucket_policy = json.dumps(bucket_policy)

    #Generate signed POST request
    policyy = base64.b64encode(bucket_policy.encode('utf-8'))
    signaturee = base64.b64encode(hmac.new(AWS_SECRET_ACCESS_KEY.encode('utf-8'), policyy, hashlib.sha256).digest())


    return render_template("annotate.html", id = uqid, bucket_name = bucket_namee, acl=acll, aws_key = aws_keyy, policy =policyy, s3key = s3keyy, signature = signaturee)

'' '

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