728x90
728x90
Multer 모듈
Multer는 Node.js 환경에서 파일 업로드를 처리하기 위한 미들웨어이다. Express와 함께 사용하면 파일 업로드를 쉽게 처리할 수 있으며, connect-multiparty와 비교하여 더 유연하고 안정적으로 파일 업로드를 처리할 수 있다.
Multer는 다양한 옵션을 제공하여 파일 업로드를 보다 세밀하게 제어할 수 있으며, 다양한 예외 상황에 대한 처리도 가능하다.
예를 들어, 파일 사이즈 제한, 파일 형식 제한, 파일 이름 중복 방지 등 다양한 옵션을 설정할 수 있다. 또한, Multer는 여러 파일을 동시에 업로드할 수 있으며, 업로드된 파일의 정보를 쉽게 가져올 수 있는 API도 제공한다.
Multer 모듈은 다음과 같이 설치할 수 있다.
npm install multer
Multer를 사용하기 위해서는 먼저 multer 모듈을 임포트해야 한다.
const multer = require('multer');
- multer 모듈을 임포트한다.
- multer 객체를 생성한다. 이때, storage, limits, fileFilter 등의 옵션을 설정할 수 있다.
- multer 객체를 사용하여 파일 업로드를 처리한다. 이때, single, array, fields 등의 메소드를 사용하여 파일 업로드를 처리할 수 있다.
파일 업로드 처리
multer는 http 요청의 본문에 포함된 파일을 서버로 업로드할 수 있도록 지원함
upload.single(fieldname) 또는 upload.array(fieldname[, maxCount])과 같은 메서드를 사용하여 단일 파일 또는 여러 파일을 처리할 수 있음
const multer = require('multer');
const upload = multer({ dest: 'uploads/' });
app.post('/profile', upload.single('ramona'), (req, res, next) => {
// req.file은 `ramona` 파일에 대한 정보
// 키(`avatar`)는 multer 미들웨어가 사용되는 필드
})
- multer는 HTTP 요청의 본문에 포함된 파일을 서버로 업로드할 수 있도록 지원한다
- upload.single(fieldname) 또는 upload.array(fieldname[, maxCount])과 같은 메서드를 사용하여 단일 파일 또는 여러 파일을 처리할 수 있다
- upload.single(fieldname)은 fieldname 필드의 단일 파일을 처리한다
- req.file 객체는 파일에 대한 정보를 담고 있다. fieldname은 upload.single() 메서드가 사용되는 필드 이름
파일 저장 경로 및 이름 지정
업로드된 파일의 저장 경로와 이름을 지정할 수 있다.
const multer = require('multer');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
});
const upload = multer({ storage: storage });
- storage 옵션을 설정해 파일 저장 위치, 파일 이름 규칙, 파일 확장자 등을 제어할 수 있다.
- multer.diskStorage() 메서드를 사용하여 파일 저장 경로와 파일 이름 규칙을 설정한다.
- cb 콜백 함수를 사용하여 저장 경로와 파일 이름을 반환한다.
- cb(null, 'uploads/')는 업로드된 파일이 uploads 폴더에 저장되도록 지정한다.
- cb(null, file.fieldname + '-' + Date.now())는 파일 이름을 fieldname-현재시간 형식으로 지정
파일 유효성 검사
filefilter 옵션을 설정하여 허용되는 파일 확장자, 파일 크기 등을 제한할 수 있다.
const multer = require('multer');
const upload = multer({
storage: storage,
fileFilter: function (req, file, cb) {
// 파일 필터링 로직
if (!file.originalname.match(/\\\\\\\\.(jpg|jpeg|png|gif)$/)) {
return cb(new Error('Only image files are allowed!'));
}
cb(null, true);
}
});
- fileFilter 옵션을 설정해 허용되는 파일 확장자, 파일 크기 등을 제한할 수 있다.
- fileFilter 콜백 함수는 업로드할 파일의 유효성을 검사한다.
- 파일이 유효한 경우 cb(null, true)를 호출한다.
- 유효하지 않은 경우 cb(new Error('Only image files are allowed!'))와 같이 에러를 반환한다
여러 필드 처리
단일 파일 뿐만 아니라 여러 필드(텍스트, 파일)등을 동시에 처리할 수 있다
const multer = require('multer');
const upload = multer();
app.post('/profile', upload.fields([
{ name: 'avatar', maxCount: 1 },
{ name: 'gallery', maxCount: 8 }
]), (req, res, next) => {
// req.files는 `avatar`와 `gallery` 파일에 대한 정보
// 키(`avatar`와 `gallery`)는 multer 미들웨어가 사용되는 필드명
})
- 단일 파일 뿐만 아니라 여러 필드(텍스트, 파일)등을 동시에 처리할 수 있다.
- upload.fields(fields) 메서드를 사용하여 여러 필드를 처리한다.
- fields는 배열 형태로 필드 정보를 담고 있다
- 필드 정보는 { name: 필드이름, maxCount: 파일 수 }의 형태로 지정한다.
- req.files 객체에는 { 필드이름: 파일정보 } 형태로 정보가 담겨 있다.
300x250
'2023 공부한것들' 카테고리의 다른 글
[TIL] 20230622 (0) | 2023.06.23 |
---|---|
[node.js] 사진 업로드 기능을 포함한 게시판: 백엔드 서버 구조 짜기 (0) | 2023.06.22 |
[node.js] 동기/비동기 한판 정리 (2) | 2023.06.22 |
[Node.js] An Introduction to Routing in Client/Server Applications (0) | 2023.06.19 |
WIL : 20230614-20230618 (0) | 2023.06.18 |