[英]using multer -s3 amazon server image upload error access denied
AccessDenied: Access Denied
at Request.extractError (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/services/s3.js:524:35)
at Request.callListeners (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/sequential_executor.js:105:20)
at Request.emit (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/request.js:615:14)
at Request.transition (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/request.js:38:9)
at Request.<anonymous> (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/request.js:617:12)
at Request.callListeners (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/sequential_executor.js:115:18)
at Request.emit (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/sequential_executor.js:77:10)
at Request.emit (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/request.js:615:14)
at Request.transition (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/request.js:22:10)
at AcceptorStateMachine.runTo (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/state_machine.js:14:12)
at /home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/state_machine.js:26:10
at Request.<anonymous> (/home/cricket_game/node_modules/multer-s3/node_modules/s3fs/node_modules/aws-sdk/lib/request.js:38:9)
我通过访问我在
AWS
网站中的S3
账户解决了这个问题,并在“Permissions
选项卡下为公众提供了full access
Permissions
。 (
顺便说一句,不建议像 AWS 所说的那样,但这是我找到的唯一方法,以便我完成它)
您需要使用 IAM 创建以下策略:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Resource": "arn:aws:s3:::your-bucket-name-here/*"
}
]
}
即使我面临同样的问题,我也解决了。
对我来说,这个问题的原因是我一直在将 acl(访问控制列表)密钥acl: 'public-read'传递给 multerS3 对象参数。
ACL 密钥区分大小写,而不是使用acl: 'public-read'
using ACL: 'public-read'
工作正常。
如果您没有在 multerS3 对象参数中传递 ACL 属性,则可以。
如果未指定 ACL,则默认使用ACL: 'private'
存储文件ACL: 'private'
AWS 支持以下选项:
ACL:私有 | 公众阅读| 公共读写| aws-exec-read | 认证读取| 桶所有者阅读| 桶所有者完全控制
带有acl (访问被拒绝)的multerS3:
var upload = multer({
storage: multerS3({
s3: s3,
acl: 'public-read',
bucket: BucketName,
key: function (req, file, cb) {
cb(null, new Date().toISOString() + '-' + file.originalname);
}
})
});
带有ACL 的multerS3(工作正常):
var upload = multer({
storage: multerS3({
s3: s3,
ACL: 'public-read',
bucket: BucketName,
key: function (req, file, cb) {
cb(null, new Date().toISOString() + '-' + file.originalname);
}
})
});
您的 s3 存储桶可能没有公共访问权限。 您可以为您的 s3 存储桶提供公共访问权限(不是首选),否则您可以设置 CloudFront 分发并提供对该分发的必要访问权限(首选),请遵循本指南。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.