Javascript/Node.js and Express

imageUpload and Multer(Javascript, Node.js)

insub4067 2021. 7. 15. 17:40
const multer = require("multer");

//저장경로 설정 및 이름설정
const storage = multer.diskStorage({
    destination: function (req, file, cb) {
        cb(null, "./images");
    },
    filename: function (req, file, cb) {
        cb(null, file.originalname);
    },
});

//파일형식검사 (jpeg, jpg, png, gif 허용)
const fileFilter = (req, file, cb) => {
    if (file.mimetype === "image/jpeg" || file.mimetype === "image/jpg" ===
    file.mimetype === "image/png" || file.mimetype === "image/gif" ) {
        cb(null, true);
    } else {
        cb(new Error("이미지 파일 형식이 맞지 않습니다"), false);
    }
};

//미들웨어
const upload = multer({
    storage: storage,
    limits: {
        fileSize: 1024 * 1024 * 5,
    },
    fileFilter: fileFilter,
});

//여러장일시 미들웨어(detail_image라는 필드네임은 10장이 최대로 설정)
const images =  upload.fields([{ name: 'thumbnail' }, { name: 'detail_image', maxCount: 10 }])

//포스트 api(1장일 경우)
router.post('/add', upload.single(image), async (req, res) => {

  //파일저장경로
  const image = req.file.path

})

//포스트 api(여러장 겨우)
router.post('/add', imaages, async (req, res) => {

  //thumbail 파일저장경로
  const thumbnail = req.files['thumbnail'][0].path

  //detail_images라는 빈 Array
  const detail_images = [];

  //detail_images라는 Array에 detail_image들의 저장 경로 입력
  req.files['detail_image'].forEach( image => detail_images.push(image.path) )

})