$ 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가 이를 포함할 것입니다.
})
기본옵션은 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
}
// 정상적으로 완료됨
})
})