노래하듯 이야기하고, 춤추듯 정복하라.

[Node.js API 개발] AWS S3 이미지 업로드, multer-s3 사용 본문

프로그래밍/node.js

[Node.js API 개발] AWS S3 이미지 업로드, multer-s3 사용

hyeoke 2019. 5. 29. 17:08

# 필요한 모듈

const multer = require('multer');
const multerS3 = require('multer-s3');
const fs = require('fs'); // 설치 x
const path = require('path'); // 설치 x
const AWS = require('aws-sdk');

# app.js에서 aws 설정 세팅

const AWS = require('aws-sdk');

AWS.config.update({
    accessKeyId: process.env.AWS_ACCESS_KEY_ID,
    secretAccessKey: process.env.AWS_SECRET_ACCESS_KEY,
    region : 'ap-northeast-2'
});

# img 업로드 구현

1. upload 모듈 만들기 

- 필자는 라우터 파일에 만듬 -> 따로 모듈화하여 사용하는게 깔끔함.

- npm(예제가 있어서 간편하게 따라하기 좋음) => https://www.npmjs.com/package/multer-s3

// 이미지 저장경로, 파일명 세팅
const upload = multer({
    storage: multerS3({
        s3: s3,
        bucket: "numberone-s3-userinfo", // 버킷 이름
        contentType: multerS3.AUTO_CONTENT_TYPE, // 자동을 콘텐츠 타입 세팅
        acl: 'public-read', // 클라이언트에서 자유롭게 가용하기 위함
        key: (req, file, cb) => {
            console.log(file);
            cb(null, file.originalname)
        },
    }),
    limits: { fileSize: 5 * 1024 * 1024 }, // 용량 제한
});

[ TMI ]

* 같이 일하고 계시는 형님분께서 간편하게 s3 사용할 수 있도록 모듈을 만들어 놓으셨네요! (깨알홍보)

=> 링크 : https://www.npmjs.com/package/tls_aws

 

tls_aws

AWS와 관련된 미들웨어(모듈)

www.npmjs.com

2. upload 모듈을 이용한 라우터 구현

router.post('/post/img', upload.single('img'), (req, res) => {
    try {
        console.log("req.file: ", req.file); // 테스트 => req.file.location에 이미지 링크(s3-server)가 담겨있음 

        let payLoad = { url: req.file.location };
        response(res, 200, payLoad);
    } catch (err) {
        console.log(err);
        response(res, 500, "서버 에러")
    }
});

3. Postman으로 데이터 보내보기 (Body -> from-data로 보내야 함)

 - 데이터 key(name) 값 세팅과 파일을 첨부해줌

- 실제로 구현된 서버에서 온 response: 아래 url이 aws s3 서버에 저장되어 있는 이미지 위치이다.

Comments