我现在已经徒劳地试了2天才能上传到我的Amazon S3 Bucket。以下是我呈现的表格:
<form action="http://s3.amazonaws.com/MYBUCKETNAME" method="post" enctype="multipart/form-data">
<input type="hidden" name="AWSAccessKeyId" value="MYACCESSKEY" />
<input type="hidden" name="acl" value="private" />
<input type="hidden" name="key" value="UserUploads/TestUser/${filename}" />
<input type="hidden" name="success_action_redirect" value="http://WWW.MYURL.COM/" />
<input type="hidden" name="policy" value="POLICY" />
<input type="hidden" name="signature" value="SIGNATURE" />
<div>
Please specify a file, or a set of files:
<input type="file" name="file" size="100" />
</div>
<input type="submit" value="Upload" />
</form>
我的政策文件如下:
{
expiration = "2011-12-08T12:00:00.000Z",
conditions = [
["eq","bucket","MYBUCKETNAME"],
["eq","acl","private"],
["starts-with","$key","UserUploads/TestUser/"],
["eq","success_action_redirect", "HTTP://WWW.MYURL.COM/"]
]
}
我收到以下错误: 代码:AccessDenied, 消息:根据策略无效:策略条件失败:[“eq”,“bucket”,“MYBUCKETNAME”]
有没有人有任何想法,我在这里抓住稻草。还不确定我的Bucket Policy和ACL是否正确。
答案 0 :(得分:4)
根据http://doc.s3.amazonaws.com/proposals/post.html#Access_Control
匹配特定值
描述:您想要匹配某些字段 特定值,例如匹配存储桶名称或要求存储 使用公共读取访问控制策略上载对象。该 字段值区分大小写,但名称不是。
语法:有两种方法可以要求字段fieldname匹配 字符串值。该值区分大小写。如果值开始 美元符号($),美元符号必须用a来转义 反斜杠(\ $)
[ "eq", "$fieldname", "S" ],
(注意$前缀)。
因此,您使用“eq”格式
时,您的政策应该有$ in答案 1 :(得分:2)
为什么不在C#中使用S3 SDK(http://aws.amazon.com/sdkfornet/)这样做,它更安全一点。
这是我的博客文章,其中包含更多详细信息:http://bradoyler.com/post/3614362044/uploading-an-image-with-aws-sdk-for-net-c。
干杯,祝你好运。
答案 2 :(得分:1)
我收到以下错误: 根据策略无效:策略条件失败:[\“eq \”,\“$ bucket \”
经过几个小时,我才知道你不能有一个大写字母的桶。将桶改为小写固定它。