이미 응답을 한번 보냈는데 두 번째 응답을 보내려 시도하기 때문에 서버가 충돌하므로 오류 메시지가 표시됩니다.
AccessControlList 지원되지 않음: 버킷이 ACL을 허용하지 않습니다.
ACL(Access Control List)
공식문서 참고자료 =>
https://docs.aws.amazon.com/ko_kr/AmazonS3/latest/userguide/managing-acls.html
보기 편한 블로깅 자료 =>
https://real-dongsoo7.tistory.com/101
ACL: Access Control List 의 약자로, 버켓 주인과 오브젝트 주인이 다를 경우의 권한 설정, log 저장용 버킷에 대한 권한 설정 등등에 사용하는 것이 권장사항입니다.
Policy: 우리가 사용할 권한 설정입니다. 모든 아마존 S3 권한을 policy 를 통해서 설정할 수 있습니다.
버킷권한 설정 JSON
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::ongin/*",
"Condition": {
"StringEquals": {
"s3:ExistingObjectTag/public": "yes"
}
}
}
]
}
예시코드
router.post('/spring/create', upload.single('img'), galleryController.springCreate);
//galleryController.springCreate
springCreate: (req, res) => {
// CREATE 하는 코드
// 404뜨는 이유는 파일이 제대로 전송이 안받아지는 것 같다
// upload.array로 하는데 자꾸 req.file로 받아서 아무것도 없었던 거다. 멍청이..
// 애초에 post가 받아지지 않는다 app.js에서 그냥 받아서 넘기는 식으로 해야겠다. 이 함수 폐쇄
console.log(req.file);
if (req.file === undefined) {
console.log('실행됌');
res.status(404).send('NOT OK')
}
console.log(req.file);
// fs.readFile('../../img', (err, data)=>{
// if(err){
// console.log('err : ', err);
// }
// console.log('data : ', data);
// }),
const param = {
'Bucket': 'ongin',
'Key': 'test.png',
'ACL': 'public-read', // 모든 사람들이 읽을 수 있기위해서 ACL는 권한이란 뜻임
'Body': 'test',
'ContentType': 'text' // 파일이 어떤 자료형인지 알려주는 것 image/png
}
s3.upload(param, function (err, data) {
if (err) {
res.status(404).send('NOT OK');
console.log('error : ', err);
return ;
}else{
console.log('data : ', data);
res.status(201).send('OKㅇㅂㅈㅇㅂㅈㅇㅂ');
}
});
}