【发布时间】:2016-04-11 10:27:08
【问题描述】:
我正在尝试将 mp3 文件上传到我的 S3 存储桶。我在某处读到,最好的方法是将文件从 html 表单直接上传到 S3,而无需通过服务器进行管道传输。但我想知道:这种方法安全吗?出于安全原因(例如应用访问密钥等)是否不需要服务器?
我也发现让它工作起来相当困难。官方的解释我觉得不是很详细。
我正在关注本指南:http://docs.aws.amazon.com/AmazonS3/latest/API/sigv4-post-example.html 这是官方指南。我不确定我做对了。您能否告诉我这是否是正确的方法以及我做错了什么:
1.我填写了一个 Policy 对象
{ "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。我对 Policy Object 进行 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>
- 似乎表单输入值与我在表单中引用的新创建的 Policy 对象相同。那我为什么要填写两次呢?
【问题讨论】:
标签: amazon-web-services amazon-s3