TIL 02.10

Jay·2021년 2월 10일
1

Sequelize(ORM)을 이용해 CRUD API를 만들었다.

검색 기능이 특히 어려웠는데, 페이지네이션과 검색어에 따른 API 예외처리를 만들어주는게
쉽지 않았다.

로컬에서 완벽하다 생각해서, AWS EC2에 배포하면 다른 오류가 생기고.. 다시 고치고 배포하고..
반복했다.

Multer s3를 이용한 s3업로드와 업로드 된 파일의 url을 DB에 저장하는 작업도 쉽지 않았다.

Multer

라이브러리

const multer = require('multer');
const path = require('path');
const AWS = require('aws-sdk');
const multerS3 = require('multer-s3');
const dotenv = require('dotenv');
dotenv.config();

AWS S3셋팅
이미지 업로드 전용 S3 버킷을 만들었는데, key를 발급받을 수 있다.
key 파일을 확인해보면 accesskey, secreatAccessKey를 얻을 수 있다.


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

파일명, 버킷 설정

파일 최대 크기는 :5mb,
파일명은 key에서 업로드 날짜로 지정해주었다.

const upload = multer({
  storage: multerS3({
    s3: new AWS.S3(),
    bucket: 'S3 이미지 버킷명',
    key: function (req, file, cb) {
      let extension = path.extname(file.originalname);
      cb(null, Date.now().toString() + extension);
    },
  }),
  limits: { fieldSize: 5 * 1024 * 1024 },
});

S3에 업로드
여러장을 업로드하기에 upload.array로 했다

upload.array 안의 imgs는 클라이언트 폼데이터 전송부의 name과 같아야하고,
20은 파일 업로드 최대 수를 의미한다.

업로드 뒤의 콜백 에서 req.files로 업로드된 사진들의 경로와, 파일명, 기타 정보를 얻을 수 있다.

app.post('/image', upload.array('imgs', 20), function (req, res) {
  console.log(req.files)
}
profile
programming!

2개의 댓글

comment-user-thumbnail
2021년 3월 4일

잘보고 갑니다~

1개의 답글