如何通过SSL将文件直接上传到S3?

时间:2012-03-27 18:00:05

标签: post ssl amazon-s3 amazon-web-services

我已经在亚马逊S3上使用基于浏览器的直接POST上传一段时间了,而且最近才开始通过HTTPS发布。普通的HTTP帖子工作得很好。但是,当我将相同的表单发布到https://s3.amazonaws.com/时,我得到“405方法不允许”。

基于浏览器的直接AWS POST上传是否不支持HTTPS?如果他们这样做,我怎么能在没有405错误的情况下做到这一点?

谢谢!

1 个答案:

答案 0 :(得分:7)

HTML FORM操作可能会出现问题。

The action specifies the URL that processes the request, which must be set to the URL of the
bucket. For example, if the name of your bucket is "johnsmith", the URL 
is "http://johnsmith.s3.amazonaws.com/".

请查看此AMAZON S3文档链接以获取更多详细信息: http://docs.amazonwebservices.com/AmazonS3/latest/dev/HTTPPOSTForms.html#HTTPPOSTFormDeclaration

还有另一篇文章。 Amazon S3 - HTTPS/SSL - Is it possible?

<强>更新 我可以使用这个HTML&amp;上传对象通过SSL上传到S3存储桶。 Policy.Check表单操作。

政策:

{
  "expiration": "2012-06-04T12:00:00.000Z",
  "conditions": [
    {"bucket": "<YourBucketName>" },
    {"acl": "public-read" },
    ["eq", "$key", "testImage.jpg"],
    ["starts-with", "$Content-Type", "image/jpeg"],
  ]
}

HTML:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="https://s3.amazonaws.com/<YourBucketName>/" method="post" enctype="multipart/form-data">
<input type="text" name="key" value="testImage.jpg" />
<input type="text" name="acl" value="public-read" />
<input type="text" name="content-type" value="image/jpeg" />
<input type="hidden" name="AWSAccessKeyId" value="<YOUR ACCESS KEY>" />
<input type="hidden" name="policy" value="<YOUR GENERATED POLICY>" />
<input type="hidden" name="signature" value="<YOUR GENERATED SIGNATURE>" />
<input name="file" type="file" />
<input name="submit" value="Upload" type="submit" />
</form>
</body>
</html>

您必须知道如何生成编码策略和签名。