我正在尝试将mp3文件上传到我的S3存储桶。我在某个地方读到,最好的方法是直接从html表单将文件上传到S3,而不通过服务器传输。但我想知道:这种方法是否安全?难道不需要服务器出于安全原因,如应用访问密钥等吗?
此外,我发现这很难实现。官方说明并不是很详细。
我遵循这个指南:http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html 这是官方指南。我不确定我是否做得对。你能告诉我这是正确的方法以及我做错了什么吗?
1. 我填写一个策略对象。
此外,我发现这很难实现。官方说明并不是很详细。
我遵循这个指南:http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html 这是官方指南。我不确定我是否做得对。你能告诉我这是正确的方法以及我做错了什么吗?
1. 我填写一个策略对象。
{ "expiration": "2015-12-30T12:00:00.000Z",
"conditions": [
{"bucket": "sigv4examplebucket"},
["starts-with", "$key", "user/user1/"],
{"acl": "public-read"},
{"success_action_redirect": "http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html"},
["starts-with", "$Content-Type", "image/"],
{"x-amz-meta-uuid": "14365123651274"},
{"x-amz-server-side-encryption": "AES256"},
["starts-with", "$x-amz-meta-tag", ""],
{"x-amz-credential": "AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request"},
{"x-amz-algorithm": "AWS4-HMAC-SHA256"},
{"x-amz-date": "20151229T000000Z" }
]
}
- "x-amz-meta-uuid"是什么,我在哪里可以找到它?
- "x-amz-credential"节点中要写什么内容?
2. 我对策略对象进行base64编码。
3. 我制作了带有上传表单的HTML页面。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form action="http://sigv4examplebucket.s3.amazonaws.com/" method="post" enctype="multipart/form-data">
Key to upload:
<input type="input" name="key" value="user/user1/${filename}" /><br />
<input type="hidden" name="acl" value="public-read" />
<input type="hidden" name="success_action_redirect" value="http://sigv4examplebucket.s3.amazonaws.com/successful_upload.html" />
Content-Type:
<input type="input" name="Content-Type" value="image/jpeg" /><br />
<input type="hidden" name="x-amz-meta-uuid" value="14365123651274" />
<input type="hidden" name="x-amz-server-side-encryption" value="AES256" />
<input type="text" name="X-Amz-Credential" value="AKIAIOSFODNN7EXAMPLE/20151229/us-east-1/s3/aws4_request" />
<input type="text" name="X-Amz-Algorithm" value="AWS4-HMAC-SHA256" />
<input type="text" name="X-Amz-Date" value="20151229T000000Z" />
Tags for File:
<input type="input" name="x-amz-meta-tag" value="" /><br />
<input type="hidden" name="Policy" value='<Base64-encoded policy string>' />
<input type="hidden" name="X-Amz-Signature" value="<signature-value>" />
File:
<input type="file" name="file" /> <br />
<!-- The elements after this will be ignored -->
<input type="submit" name="submit" value="Upload to Amazon S3" />
</form>
</body>
</html>
- 看起来表单输入的值与我在表单中引用的新创建的策略对象是相同的。那么为什么我还要填写两次?