Multer는 파일 업로드를 위해 multipart/form-data
를 다루기 위한 node.js의 미들웨어다.
npm install --save multer
multer를 사용하기 위해서는 form의 인코딩 방법이 enctype="multipart/form-data"
형식이어야 한다.
<form method="post" enctype="multipart/form-data">
<input type="text" placeholder="아이디를 입력하세요" name="userId" />
<input type="password" placeholder="비밀번호를 입력하세요." name="password" />
<input type="passwordConfirm" placeholder="비밀번호를 재입력하세요." name="passwordConfirm" />
<label for="avatar">프로필 이미지</label>
<input type="file" name="avatar" id="avatar"/>
<button>회원가입</button>
</form>
const express = require('express');
// multer 모듈 연결
const multer = require('multer');
// 클라이언트로 받은 데이터의 저장 경로 지정
const upload = multer({ dest: 'uploads/' });
const app = express();
const PORT = 4000;
app.post("/join", upload.single("avatar"), (req, res)=>{
console.log(req.file)
// 클라이언트로부터 받은 file 정보
})
const handelServer = () => {
console.log(`✅ ${PORT}서버에 연결 되었습니다.`);
};
app.listen(PORT, handelServer);
multer는 옵션 객체를 허용하며 기본으로 dest
요소는 파일 업로드시 저장위치를 multer에게 알려준다.
const upload = multer(option)
Key | Description |
---|---|
dest 또는 storage | 파일이 저장되는 위치 |
fileFilter | 허용할 파일 제어 함수 |
limits | 업로드 된 데이터 용량 크기 |
preservePath | 파일의 base name 대신 보존할 파일의 전체 경로 |
fieldname
인자에 명시된 이름의 단수 파일을 전달 받으며 이는 req.file
에 저장된다.
upload.single("avatar")
// "avatar"는 이름으로 req.file에 저장된다.
fieldname
인자에 명시된 이름의 파일 전부를 배열 형태로 전달 받으며 maxCount
에 명시된 값 이상의 파일이 업로드 될 경우 에러를 출력한다. 이는
req.files
에 저장된다.
upload.array("photos", 10)
// "photos"는 이름으로 req.files에 저장되며 최대 10개이상의 파일이 업로드 될 경우 에러 출력
fields
인자에 명시된 여러 파일을 전달 받으며, name
과 maxCount
(선택사항)을 포함하는 객체의 배열이야 한다.
upload.fields([
{name: "avatar"},
{name: "photos", maxCount:10}
])
// "avatar"와 "photos" 이름으로 req.files에 저장되며 "photos"의 경우 최대 10개이상의 파일이 업로드 될 경우 에러 출력
오직 텍스트 필드만 허용되며, 파일이 업로드 될 경우 "LIMIT_UNEXPECTED_FILE"
와 같은 에러 코드 발생
모든 파일을 허용하며, 파일 배열은 req.files
에 저장된다.
❗️악의적으로 사용자가 예측하지 못한 곳으로 파일 업로드 할 수 있으므로 절대 multer를 Global middleware로 사용하지 말 것.