Multer 사용하기

Big Jay·2022년 8월 29일
0

nodejs

목록 보기
4/4

Multer는 파일 업로드를 위해 multipart/form-data를 다루기 위한 node.js의 미들웨어다.

설치 및 사용

설치

npm install --save multer

사용

multer를 사용하기 위해서는 form의 인코딩 방법이 enctype="multipart/form-data" 형식이어야 한다.

client

<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>

sever

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(option)

multer는 옵션 객체를 허용하며 기본으로 dest요소는 파일 업로드시 저장위치를 multer에게 알려준다.

const upload = multer(option)
KeyDescription
dest또는 storage파일이 저장되는 위치
fileFilter허용할 파일 제어 함수
limits업로드 된 데이터 용량 크기
preservePath파일의 base name 대신 보존할 파일의 전체 경로

.single(fieldname)

fieldname인자에 명시된 이름의 단수 파일을 전달 받으며 이는 req.file에 저장된다.

upload.single("avatar")
// "avatar"는 이름으로 req.file에 저장된다.

.array(fieldname [, maxCount])

fieldname 인자에 명시된 이름의 파일 전부를 배열 형태로 전달 받으며 maxCount에 명시된 값 이상의 파일이 업로드 될 경우 에러를 출력한다. 이는
req.files에 저장된다.

upload.array("photos", 10)
// "photos"는 이름으로 req.files에 저장되며 최대 10개이상의 파일이 업로드 될 경우 에러 출력

.fields(fields)

fields인자에 명시된 여러 파일을 전달 받으며, namemaxCount(선택사항)을 포함하는 객체의 배열이야 한다.

upload.fields([
  {name: "avatar"},
  {name: "photos", maxCount:10}
])
// "avatar"와 "photos" 이름으로 req.files에 저장되며 "photos"의 경우 최대 10개이상의 파일이 업로드 될 경우 에러 출력

.none()

오직 텍스트 필드만 허용되며, 파일이 업로드 될 경우 "LIMIT_UNEXPECTED_FILE"와 같은 에러 코드 발생

.any()

모든 파일을 허용하며, 파일 배열은 req.files에 저장된다.

❗️악의적으로 사용자가 예측하지 못한 곳으로 파일 업로드 할 수 있으므로 절대 multer를 Global middleware로 사용하지 말 것.

profile
안녕하세요.

0개의 댓글