권한
을 수정해주어야 한다.💡 퍼블릭 엑세스
💡 버킷 정책
- 다음과 같이 설정 후 생성된 정책을 복사해 붙여넣으면 된다
- Actions 의 경우
GetObject
를 선택
🔥 다만 주의해야 할 것!
"Resource": "arn:aws:s3:::버킷이름/*"
다음과 같이 버킷이름 뒤에/*
를 꼭 붙여주어야 에러가 안난다
나는 이거때문에 정책을 저장했을 때 계속 에러가 났다;;
import { useState } from 'react';
import styled from "styled-components";
import axios from 'axios';
const ImgPreview = styled.img`
border-style: solid;
border-color: black;
width: 250px;
height: 250px;
margin: 30px;
position: absolute;
left: 41%;
right: 50%;
`;
const UploadImage = styled.input`
height: 30px;
position: absolute;
left: 50%;
right: 30%;
margin-top: 300px;
`
const ViewImage = styled.button`
height: 30px;
position: absolute;
left: 50%;
right: 35%;
margin-top: 350px;
`;
export default function Main() {
const [img, setImg] = useState('')
const formSubmit = (e) => {
const img = e.target.files[0];
const formData = new FormData();
formData.append('file', img);
axios.post("이미지 요청 주소", formData).then(res => {
setImg(res.data.location)
alert('성공')
}).catch(err => {
alert('실패')
})
}
return (
<div>
<div className="img-preview">
<ImgPreview id="img-preview" src={img} />
<UploadImage type='file'
accept='image/*'
id='img'
onChange={formSubmit}>
</UploadImage>
</div>
</div>
);
}
AWS 오른쪽 상단 자기 아이디를 클릭 -> 보안자격증명 -> 엑세스 키
에서 발급받을 수 있다.region: ap-northeast-2
로 설정하면 된다// 이미지 업로드
const multer = require('multer');
const AWS = require('aws-sdk');
const multerS3 = require('multer-s3');
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ACCESSKEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESSKEY,
region: process.env.AWS_REGION,
})
const upload = multer({
storage : multerS3({
s3:s3,
bucket:'imgstorages',
key : function(req, file, cb) {
var ext = file.mimetype.split('/')[1];
if(!['png', 'jpg', 'jpeg', 'gif', 'bmp'].includes(ext)) {
return cb(new Error('Only images are allowed'));
}
cb(null, Date.now() + '.' + file.originalname.split('.').pop());
}
}),
acl : 'public-read-write',
limits: { fileSize: 5 * 1024 * 1024 },
});
// 이미지 업로드 요청
router.post('/img', upload.single('file'), async (req, res) => {
console.log(req.file.location)
res.status(200).json({ location: req.file.location })
});