Javascript 使用AWS预签名将图像上载到Amazon S3

Javascript 使用AWS预签名将图像上载到Amazon S3,javascript,html,amazon-web-services,amazon-s3,aws-sdk,Javascript,Html,Amazon Web Services,Amazon S3,Aws Sdk,我正在生成带有HttpVerb的预签名URL,以便将文件上载到我的bucket。 奇怪的是,当我使用AWSDK使用预先指定的URL上传文件时,它工作正常。但是当我在FormAction方法中使用这个URL时,我得到了下面的错误。 “我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。” 下面是上传文件的HTML代码 <html> <head> <title>S3 POST Form</title> &l

我正在生成带有HttpVerb的预签名URL,以便将文件上载到我的bucket。 奇怪的是,当我使用AWSDK使用预先指定的URL上传文件时,它工作正常。但是当我在FormAction方法中使用这个URL时,我得到了下面的错误。 “我们计算的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。”

下面是上传文件的HTML代码

    <html> 
  <head>
    <title>S3 POST Form</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  </head>

  <body> 
    <form action="https://mvrskt-certifications.s3-ap-southeast-1.amazonaws.com/Temp/ARMA.jpg?AWSAccessKeyId=AKIAIGPD33Q3DT22IFWQ&Expires=1451482258&Signature=nYx%2F2kDmna5XqEWx5CPTg4OIYDU%3D" method="post" enctype="multipart/form-data">
      <input type="hidden" name="key" value="mvrskt-certifications/Temp/ARMA.jpg">
      <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>
我已经在我的桶上设置了CORS策略,如下所述

<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

*
得到
邮递
3000
授权
我是AWS S3的新手,在使用它时完全感到困惑。。。。 pl帮助了解如何使用form post或AJAX上载此文件

此外,我们还需要为我要上传的每个图像生成预签名吗?


我可以看到,我们也可以使用签名策略来上载图像,但我是否需要为我要上载的每个图像生成签名策略?预签名URL特定于密钥(bucket中的路径/文件)、HTTP谓词(
PUT
)和您要发出的请求的其他属性

表单
POST
不是HTTP
PUT
请求,因此这就是为什么在进行
POST
时,不能将预签名URL用于
PUT
请求的简单解释

不仅动词不可互换,基于浏览器的
POST
上载操作与
PUT
操作完全不同,而且需要签名的策略语句来指示各种表单字段的可接受值。如果没有它,您无法从表单上载


是的,您应该为要上载的每个文件生成策略和签名,否则您会让恶意用户覆盖您希望他们能够写入的文件以外的文件。

您能否发布解决方案,说明您如何解决此问题?谢谢
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
    <CORSRule>
        <AllowedOrigin>*</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <MaxAgeSeconds>3000</MaxAgeSeconds>
        <AllowedHeader>Authorization</AllowedHeader>
    </CORSRule>
</CORSConfiguration>