S3 생성시 퍼블릭으로 생성
const express = require('express');
const router = express.Router();
const multer = require('multer');
const AWS = require('aws-sdk');
const multerS3 = require('multer-s3');
const uuidv1 = require('uuid/v1');
const path = require('path');
const authMiddleware = require('../middleware/auth');
const FileModel = require('../models/File');
AWS.config.update({
region: 'ap-northeast-2',
accessKeyId: process.env.S3_ACCESS_ID,
secretAccessKey: process.env.S3_SECRET_KEY,
});
const upload = multer({
storage: multerS3({
s3: new AWS.S3(),
bucket: 'gns-static-s3',
key(req, file, cb) {
const ext = path.extname(file.originalname);
const pathname = 'images/';
const filename = `${uuidv1()}${ext}`;
cb(null, `${pathname}${filename}`);
}
}),
limits: { fileSize: 20 * 1024 * 1024 },
});
router.post('/upload', authMiddleware, upload.single('file'), async (req, res) => {
const { decoded } = req;
const { file } = req;
const File = new FileModel({
name: file.key.substr(file.key.indexOf('/') + 1),
originalFilename: file.originalname,
size: file.size,
extension: path.extname(file.key).substr(1),
path: file.key.substring(0, file.key.indexOf('/') + 1),
url: file.location,
created_by: decoded.id,
});
try {
const result = await File.save();
console.log(result);
res.json({ message: '등록 성공', file: result });
} catch (e) {
console.error(e);
res.status(500).json({ message: '등록 실패' });
}
});
module.exports = router;
그런데 location 접근이 안된다. 권한 설정 필요?
버킷 정책 수정 필요
{
"Id": "Policy1566729167104",
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1566729164746",
"Action": [
"s3:GetObject",
"s3:PutObject"
],
"Effect": "Allow",
"Resource": "arn:aws:s3:::gns-static-s3/*",
"Principal": "*"
}
]
}