上传到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" ] } ] }
但总是被禁止的。 我不知道为什么。 结果图像:
我真的需要你的帮助
更新与答案
想到@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
是否曾经被称为。 如果不是,请确保策略设置正确,并且您可以访问该控制器的方法。
- 我可以从S3对象stream中获取Content-Type而无需对headObject进行显式调用吗?
- 当我在Amazon S3中将Quiet设置为true以在deleteObjects()方法中启用安静模式时会发生什么?
- 缓冲区通常比stream更快处理?
- 如何使一个套接字stream? imagemagick后连接https响应S3
- 将较大的CSV文件加载到DynamoDb中的最佳/最佳方法
- 从node.js中的JSON将s3桶策略转换为base64
- s3stream与etags(节点)
- 从AWS Lambda函数的S3中获取对象并发送到Api Gateway
- 在NodeJS的pkgcloud中,“stream和pipe-capable”意味着什么