上传到S3返回禁止

我有一个窗体上传文件到我的桶在aws S3,这是表单

<form action="/user/fileUpload" enctype="multipart/form-data" class="ui form" method="post"> <div class="field"> <select class="ui dropdown"> <option value="">Print Agency</option> <option value="fastprint">Fast Print</option> <option value="printpress">Print Press</option> </select> </div> <div class="field"> <input type="file" name="uploadFile" /> </div> <div class="field"> <input type="submit" value="Upload" class="ui blue submit button" /> </div> </form> 

这是按下“提交”button时将激活的动作

 fileUpload: function(req, res) { req.file('uploadFile').upload({ adapter: require('skipper-s3'), key: 'THE-KEY', secret: 'THE-SECRET', bucket: 'THE-BUCKET' }, function (err, filesUploaded) { if (err) { console.log(err); return res.negotiate(err); } return res.ok({ files: filesUploaded, textParams: req.params.all() }); });} 

这是我的S3 CORSconfiguration

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

这是我的S3桶政策

 { "Version": "2012-10-17", "Id": "Policy1433335661532", "Statement": [ { "Sid": "Stmt1433335656754", "Effect": "Allow", "Principal": "*", "Action": [ "s3:DeleteObject", "s3:GetObject", "s3:PutObject" ], "Resource": [ "arn:aws:s3:::BUCKET-NAME/*", "arn:aws:s3:::BUCKET-NAME" ] } ] } 

但总是被禁止的。 我不知道为什么。 结果图像:

http://imgur.com/MMtingu。

我真的需要你的帮助

更新与答案

想到@tom的答案后,我知道这一切是多么愚蠢,因为我忘记了几行。

我应该把这个线内的routes.js

 'post /user/fileUpload': { controller: 'UserController', action: 'fileUpload'}, 

而下面的提交button,因为我使用CSRF

 <input type="hidden" name="_csrf" value="<%= _csrf %>" /> 

而这行UserController里面的动作fileUpload,下面是'bucket'

 ACL: 'public-read' 

问候,

埃尔默

如果console.log(err)确实是空的,就像你在注释中提到的那样,这对于s3来说是不太可能的,因为没有理由让sails返回403。

相反,我会build议检查fileUpload是否曾经被称为。 如果不是,请确保策略设置正确,并且您可以访问该控制器的方法。