当前位置: 首页 > 知识库问答 >
问题:

如何通过HTML表单上传到S3 bucket?(“SignatureDoesNotMatch”错误)

韦澄邈
2023-03-14

我正在尝试通过超文本标记语言表单将图像上传到AWS S3存储桶。

<form action="https://s3.amazonaws.com/3dphy-media-dev" method="post" enctype="multipart/form-data">
    <input type="hidden" name="AWSAccessKeyId" value="AKIAI5LGVRB427BQRRTA">
    <input type="hidden" name="acl" value="public-read">
    <input type="hidden" name="key" value="${filename}">
    <input type="hidden" name="policy" value='
    {
        "expiration": "2019-01-26T16:14:30Z",
        "conditions": [
            {"bucket": "3dphy-media-dev"},
            {"key": "${filename}"},
            {"acl": "public-read"}
        ]
    }
    '>
    <input type="hidden" name="signature" value="wml%2FZoIYBqyCHDRSSxwxkf5EvzQ%3D">
    <!--<input type="hidden" name="Content-Type" value="image/jpeg">-->

    File to upload to S3:
    <input name="file" type="file">
    <input type="submit" value="Upload File to S3">
</form>

但是,提交表单会导致错误“SignatureDoesNotMatch”和消息“我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。”

我检查了一些关于同一主题的现有问题,但他们的答案并没有解决问题。

我到底做错了什么?

共有1个答案

裘嘉树
2023-03-14

mc工具https://github.com/minio/mc可以很容易地用于此目的,作为生成此的通用工具。

$ mc share upload --recursive --expire=12h https://s3.amazonaws.com/backup/2007-Mar-2/backup

$ mc share list upload
URL: https://s3.amazonaws.com/backup/2007-Mar-2/backup
Expire: 11 hours 19 minutes 18 seconds
Share: curl https://s3.amazonaws.com/backup -F x-amz-date=20151125T052221Z -F x-amz-signature=7b13a6db1af025c2b3f1e92cd7c10100b3756c98982def74692722305419a806 -F bucket=backup -F policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMi0wMlQwNToyMjoyMS45NjJaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkYnVja2V0IiwiYmFja3VwIl0sWyJzdGFydHMtd2l0aCIsIiRrZXkiLCIyMDA3LU1hci0yL2JhY2t1cCJdLFsiZXEiLCIkeC1hbXotZGF0ZSIsIjIwMTUxMTI1VDA1MjIyMVoiXSxbImVxIiwiJHgtYW16LWFsZ29yaXRobSIsIkFXUzQtSE1BQy1TSEEyNTYiXSxbImVxIiwiJHgtYW16LWNyZWRlbnRpYWwiLCJBS0lBSTZTTk1VRk9WSUVGT1pKQS8yMDE1MTEyNS91cy1lYXN0LTEvczMvYXdzNF9yZXF1ZXN0Il1dfQ== -F x-amz-algorithm=AWS4-HMAC-SHA256 -F x-amz-credential=AKIAI6SNMUFOVIEFOZJA/20151125/us-east-1/s3/aws4_request -F key=2007-Mar-2/backup<NAME> -F file=@<FILE>

或者使用json输出

$ mc share list upload --json    
{"status":"success","url":"https://s3.amazonaws.com/backup/2007-Mar-2/backup/","share":"curl https://s3.amazonaws.com/backup -F policy=eyJleHBpcmF0aW9uIjoiMjAxNS0xMi0wMlQwNToxNTozNC45MjlaIiwiY29uZGl0aW9ucyI6W1siZXEiLCIkYnVja2V0IiwiYmFja3VwIl0sWyJlcSIsIiRrZXkiLCIyMDA3LU1hci0yL2JhY2t1cC8iXSxbImVxIiwiJHgtYW16LWRhdGUiLCIyMDE1MTEyNVQwNTE1MzRaIl0sWyJlcSIsIiR4LWFtei1hbGdvcml0aG0iLCJBV1M0LUhNQUMtU0hBMjU2Il0sWyJlcSIsIiR4LWFtei1jcmVkZW50aWFsIiwiQUtJQUk2U05NVUZPVklFRk9aSkEvMjAxNTExMjUvdXMtZWFzdC0xL3MzL2F3czRfcmVxdWVzdCJdXX0= -F x-amz-algorithm=AWS4-HMAC-SHA256 -F x-amz-credential=AKIAI6SNMUFOVIEFOZJA/20151125/us-east-1/s3/aws4_request -F x-amz-date=20151125T051534Z -F x-amz-signature=3523fed9cc9ffed7873411c1401d3fc2926055a88704e2d20dd49b8734a25469 -F bucket=backup -F key=2007-Mar-2/backup/ -F file=@<FILE>","timeLeft":40240153132134}

此外,我们还有https://github.com/minio/minio-js它在浏览器中工作,可以直接插入HTML表单

 类似资料:
  • 在html表单中,我有一个变量

  • 这是正确的吗?周围的单引号和双引号是有区别的

  • 问题内容: 在过去的几天里,我一直在努力用jQuery和AJAX提交表单。我面临的问题是在表单字段中上传图像。 我的表格是这样的: 我的用于获取表单值的jQuery脚本如下所示: 但是,如果image返回null,则返回除image 1以外的所有字段值。 如何存储在数据数组中? 我要存储,以便可以通过AJAX将值发送到服务器。 问题答案: 对于上传单个图像,像这样 对于多张图片,您将不得不循环不同

  • 我在使用aws ses时遇到SignatureDesNotMatch错误。我使用GMT日期和HMAC SHA256的安全密钥创建签名密钥,然后将其转换为Base64。 签名=base64(HMAC SHA256(日期,安全密钥)); 网址:https://email.us-west-2.amazonaws.com?Action=SendEmail 输入标题为x-amz-date: Thu,30 J

  • 我正在尝试通过ACTION\u SEND intent将文件上载到webview应用程序。如果他们选择在应用程序中使用openFileChooser上传文件,我已经可以使用它了,但我需要它在他们单击文档或画廊应用程序中的共享时工作。所以,我非常需要绕过openFileChooser,因为已经选择的文件及其Uri在我的意图中,我只需要实际上传它。我想重蹈openFileChooser的覆辙,但不知道

  • 问题内容: 假设我有一个Python变量: 然后通过呈现HTML将其传递给Jinja,并且我在JavaScript中还有一个名为的函数。我正在尝试通过的每个项目。我尝试过这样的事情: 是否可以将列表从Python传递到JavaScript,还是应该逐个循环传递列表中的每个项目?我怎样才能做到这一点? 问题答案: 要将一些上下文数据传递给javascript代码,您必须对其进行序列化,以使其被jav