카테고리 없음

TIL 0428(Multer)

하초 2023. 4. 28. 21:49

Multer

node.js의 미들웨어 중 하나로, 파일 업로드를 위해 사용된다.

Http 요청 request에 파일 정보를 추가하여, 서버 측에 전달해준다. 

multipart/form-data 형식이고(다른 폼은 지원하지 않는다),

다중 파일업로드를 지원하며, 파일에 대한 세부설정을 옵션으로 지정할 수 있다. 

 

먼저, Express는 파일 업로드 기능을 기본적으로 제공 하지 않기 때문에

Multer를 이용하기 위해서 모듈을 설치해야한다. 

npm install multer
or 
yarn add multer

 

옵션

dest of storage 파일 저장 위치 
fileFilter 허용할 파일 
limits  업로드 된 데이터 한도 
preservePath  파일의 기본이름 대신 보존할 파일의 전체 경로

옵션 객체를 생략하면, 디스크가 아니라 메모리에 저장될 수 있다. 

웹 앱에서는 dest 옵션만 있는 경우도 많다.

 

 

기본 예제 코드

const express = require('express')
const multer  = require('multer')
const upload = multer({ dest: 'uploads/' })

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가 이를 포함할 것입니다.
})