카테고리 없음
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가 이를 포함할 것입니다.
})