multer_node.js

miin·2022년 7월 21일
0

Express & node.js

목록 보기
10/10
post-thumbnail

정의

  • 파일 업로드를 위해 사용되는 node.js의 미들웨어이다
  • 효율성을 최대화 하기 위해 busboy를 기반으로 한다
  • multer는 multipart(multipart/form-data)가 아닌 폼에서는 동작하지 않는다

설치

$ npm install --save multer

사용

multer는 body 객체와 한개의 file 혹은, 여러개의 files 객체를 requst 객체에 추가한다.
body 객체는 폼텍스트 필드의 값을 포함하고, 파일 객체는 폼을 통해 업로드된 파일들을 포함하고 있다.

기본 사용 예제

const express = require('express')
const multer  = require('multer')
//입력한 파일이 uploads/폴더 내 저장됨
// multer라는 모듈이 함수라서 함수에 옵션을 줘서 실행을 시키면, 해당 함수는 미들웨어를 리턴한다.
const upload = multer({ dest: 'uploads/' })
//const upload = multer({ 
//dest: `/Users/sumin/Desktop${moment().format('YYYYMMDD')}`,
//limits: {fileSize: maxFileSize},
//fileFilter: imgFilter}).array('images', maxCount);

const app = express()

app.post('/profile', upload.single('avatar'), function (req, res, next) {
  // req.file 은 `avatar` 라는 필드의 파일 정보입니다.
  // 텍스트 필드가 있는 경우, req.body가 이를 포함할 것입니다.
})

app.post('/photos/upload', upload.array('photos', 12), function (req, res, next) {
  // req.files 는 `photos` 라는 파일정보를 배열로 가지고 있습니다.
  // 텍스트 필드가 있는 경우, req.body가 이를 포함할 것입니다.
})

const cpUpload = upload.fields([{ name: 'avatar', maxCount: 1 }, { name: 'gallery', maxCount: 8 }])
app.post('/cool-profile', cpUpload, function (req, res, next) {
  // req.files는 (String -> Array) 형태의 객체 입니다.
  // 필드명은 객체의 key에, 파일 정보는 배열로 value에 저장됩니다.
  //
  // e.g.
  //  req.files['avatar'][0] -> File
  //  req.files['gallery'] -> Array
  //
  // 텍스트 필드가 있는 경우, req.body가 이를 포함할 것입니다.
})

파일정보

multer로 전달 가능한 옵션

기본옵션은 dest이다. multer에게 파일을 어디로 업로드 할지 알려준다. 만약 옵션 객체를 생략했다면, 파일은 디스크가 아니라 메모리에 저장된다
기본적으로 multer는 이름이 중복되는 것을 방지하기 위해 파일의 이름을 재작성한다.
const upload = multer({ dest: 'uploads/' })

에러 핸들링

const upload = multer().single('avatar')

app.post('/profile', function (req, res) {
  upload(req, res, function (err) {
    if (err) {
      // 업로드할때 오류가 발생함
      return
    }

    // 정상적으로 완료됨
  })
})

참고 레퍼런스
참고 블로그

0개의 댓글