我已经从aws education创建了aws帐户。我正在尝试将图片上传到AWS s3。但是我总是得到拒绝访问错误。在这里,我将发布我的代码。请帮我解决这个错误我也将发布aws设置
const multer = require('multer');
const multerS3 = require('multer-s3');
const config = require('../config');
aws.config.update({
secretAccessKey: config.AWS_SECRET_ACCESS_KEY,
accessKeyId: config.AWS_ACCESS_KEY_ID,
region: 'us-east-1'
});
const s3 = new aws.S3();
const fileFilter = (req, file, cb) => {
if (file.mimetype === 'image/jpeg' || file.mimetype === 'image/png' || file.mimetype === 'image/jpg') {
cb(null, true);
} else {
cb(new Error('Invalid file type, only JPEG and PNG is allowed!'), false);
}
}
const upload = multer({
fileFilter,
storage: multerS3({
acl: 'private',
s3,
bucket: 'acc-partner',
metadata: function (req, file, cb) {
cb(null, {
fieldName: 'TESTING_METADATA'
});
},
key: function (req, file, cb) {
cb(null, Date.now().toString())
}
})
});
module.exports = upload;
const express = require('express');
const router = express.Router();
const UserCtrl = require('../controllers/user');
const upload = require('../services/image-upload');
const singleUpload = upload.single('image');
router.post('/image-upload', UserCtrl.authMiddleware, function(req, res) {
singleUpload(req, res, function(err) {
if (err) {
return res.status(422).send({errors: [{title: 'Image Upload Error', detail: err.message}]});
}
return res.json({'imageUrl': req.file.location});
});
});
module.exports = router;
邮递员错误
"errors": [
{
"title": "Image Upload Error",
"detail": "Access Denied"
}
]
}
这是因为您尚未设置存储桶的公共策略(正如我在AWS映像中看到的那样)。尝试将您的存储桶策略设置为公共(单击“存储桶策略”按钮)。
{
"Version": "2008-10-17",
"Statement": [
{
"Sid": "AllowPublicRead",
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::acc-partner/*"
}
]
}
您可以在https://awspolicygen.s3.amazonaws.com/policygen.html处使用策略生成器。