Team Project (2020-2021)/SeNaJooNa

10. AWS 이미지 업로드 (2021.03.08 ~ 2021.03.14)

Leenk 2021. 3. 15. 16:32

AWS 자격 증명

credentials 파일 만들기 : 파일만 만들면 별도의 설정이나 코드는 필요 없음

  • Mac/Linux : ~/.aws/credentials
  • Windows : C:\Users\USERNAME\.aws\credentials

 

이미지 업로드

  • 이미지 업로드에 AWS S3를 사용하기 위해 multer, multer-s3와 aws-sdk를 사용함.
  • npm install multer multer-s3 aws-sdk --save를 이용해 설치(--save는 package.json에 자동으로 추가하는 역할)
const awssdk = require('aws-sdk');
const multer = require('multer');
const multerS3 = require('multer-s3');

const s3 = new awssdk.S3();
const upload = multer({
    storage: multerS3({
        s3: s3,
        bucket: '버킷명',
        acl: 'public-read', //파일에 대한 접근권한으로 모든 유저(클라이언트)가 READ에 대한 권한을 가짐
        key: function (req, file, cb) { //저장될 파일 이름 정하기
            cb(null, 'collection/' + Date.now() + '.' + file.originalname.split('.').pop());
        }

    })
}, 'NONE');

module.exports = { upload };
router.post('/', upload.single('file'), (req, res) => {

    let collection = new Collection(req.body);
    if (req.file !== undefined) {
        collection.thumbnail = req.file.location;

        collection.save((err, collection) => {
            if (err) return res.json({ success: false, err });
            return res.status(200).json({
                success: true
            });
        });
    }
    else
        return res.status(400).send("Image Upload failed");
});
  • upload.single('file')이 미들웨어로 작동한다.(multer가 express에서 미들웨어 역할을 하므로 별도의 구현이 필요없다)
  • multer는 form-data에서 file(다른 이름 사용 가능)이라는 name을 가진 필드에 있는 이미지 파일을 처리하고 반환받은 값은 req.file에 나머지 데이터는 req.body에 담아 반환한다.
  • 이미지가 있을 경우 s3에 이미지 업로드가 완료되면 req.file.location에 있는 이미지 링크와 기타 데이터를 함께 데이터베이스에 저장한다.

 

회의 내용

  • 기본 구조 및 CSS 완성, 역할 분담 후 기능 구현 중
  • 남은 시간 및 팀원 변화를 고려하여 기획 수정