백엔드 서버에서 이미지 업로드는 클라이언트가 이미지를 서버로 전송, 저장하고 클라이언트에게 적절한 응답을 보내는 방식으로 이루어집니다. 업로드 방법에는 여러 가지가 있다.
const multer = require('multer');
// multer 모듈을 임포트해준다.
const storage = multer.memoryStorage();
//multer의 MemoryStorage소드를 활용해 데이터베이스에 저장이가능하다.
app.post('/upload', upload.single('image'), async (req, res) =>
//이후 경로를 지정하고 로직을 구성하면 이미지 업로드가 가능
2.로컬 파일 시스템에 저장하는 방식
const storage = multer.diskStorage({
destination: (req, file, cb) => {
cb(null, "uploads/");
},
filename: (req, file, cb) => {
cb(null, Date.now() + path.extname(file.originalname));
},
});
로컬에 저장하는 방식은 diskStorage메소드를 활용하면 되고
destination: 파일을 저장할 디렉토리 경로를 지정
filename: 저장될 파일의 이름을 설정
3.클라우드 방식
클라우드 방식으로는 Amazon S3(Simple Storage Service)는 아마존 웹 서비스에서 제공하는 클라우드 스토리지 서비스가 있다.
S3 : 파일, 데이터 및 다양한 유형의 미디어 등을 저장하고 관리하는 데 사용되는 웹 기반 스토리지 시스템
const s3 = new AWS.S3({
accessKeyId: process.env.AWS_ACCESS_KEY_ID,
secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
region: 'us-east-1',
});
// 아마존 s3에 접근하기위해 객체를 만드는 부분
// accesskeyId는 API를 호출하기 위한 키, 시크릿키는 엑세스 키와함께 인증용도
onst upload = multer({
storage: multerS3({
s3: s3, // s3객체를 사용
bucket: 'your-bucket-name', // s3의 버킷 설정부분
acl: 'public-read', //읽기 권한
key: (req, file, cb) => {
cb(null, Date.now().toString() + file.originalname);
},// 파일 저장 경로와 이름 설정
}),
});
//
장단점