[TIL] Node.js 뉴스 피드 만들기 (2) 23.06.27

이상훈·2023년 6월 28일
0

[내일배움캠프]

목록 보기
37/68

✔️오늘 한일!

  • 게시글 CRUD 작성
  • Category, Like 테이블 생성
  • AWS S3를 사용하여 이미지 업로드

multer-s3 upload오류
this.client.send is not a funtion
이미지 업로드를 시도하던 중 계속해서 해당 오류가 발생하고 있었다.
구글링 하여 원인을 찾아보니 aws-sdk 이랑 multer-s3 버전이 달라서 호환성이 맞지 않아 발생하는 문제인 것 같았다.
디펜던시를 확인해보니 깔려있는 multer-s3의 버전은 3.xx버전이고, aws-sdk는 2.xx버전이였다.

npm i multer-s3@^2

multer-s3의 버전을 2.xx버전으로 맞춰준 뒤 실행해보니 성공적으로 업로드가 되었다.

S3 객체 업로드 미들웨어

const upLoadImg = multer({
  storage: multerS3({
    s3: s3,
    bucket: process.env.S3_BUCKET_NAME,
    key: (req, file, callback) => {
      const uploadDirectory = req.query.directory ?? ''; // 업로드할 디렉토리 설정
      const extension = path.extname(file.originalname).toLowerCase();
      const fileMimetype = file.mimetype.toLowerCase();
      if (!allowedExtensions.includes(extension) || !mimeType.includes(fileMimetype)) {
        return callback(new Error('업로드가 불가능한 확장자입니다.'));
      }
      callback(null, `${uploadDirectory}/${Date.now()}_${file.originalname}`);
    },
    acl: 'public-read-write',
    contentType: multerS3.AUTO_CONTENT_TYPE, // 파일의 Content-Type 자동 설정
    metadata: (req, file, callback) => {
      callback(null, { fieldName: file.fieldname });
    },
  }),
});

S3 사용을 처음하다보니 구글링을 통해 예시들을 참고하면서 코드를 작성했다.

profile
코린이

0개의 댓글