express multer

agnusdei1207·2023년 7월 19일
0

Express Multer는 Node.js의 웹 프레임워크인 Express에서 파일 업로드를 쉽게 처리하기 위해 사용되는 미들웨어(Middleware)입니다. Multer는 멀티파트(form-data) 형식으로 전송된 파일을 처리하고 업로드할 때 유용한 기능들을 제공합니다.

Express Multer의 주요 목적:
Express Multer의 주요 목적은 클라이언트에서 서버로 파일을 업로드하는 요청을 처리하는 것입니다. 파일 업로드는 기본적으로 HTTP POST 요청과 멀티파트(form-data) 형식으로 파일 데이터를 전송합니다. Multer는 이러한 파일 데이터를 읽고 파싱하여 서버로 전달하는 일을 담당합니다.

Express Multer의 내부 작동 원리:
Multer는 내부적으로 Busboy 라이브러리를 기반으로 동작합니다. Busboy는 Node.js의 스트림을 사용하여 멀티파트 요청을 처리하는 데 사용되는 라이브러리로, 데이터를 조각조각으로 읽고 처리하는 데 매우 효율적입니다.

  1. 클라이언트가 파일을 업로드하는 요청이 서버로 전달됩니다.
  2. Express Multer는 해당 요청의 본문(body)을 파싱하여 멀티파트 데이터를 읽습니다.
  3. Multer는 Busboy를 사용하여 멀티파트 데이터를 스트림으로 처리하고, 파일의 바이너리 데이터를 임시 디렉토리에 저장합니다.
  4. 업로드된 파일에 대한 정보(파일명, 크기, MIME 타입 등)와 함께 업로드 결과를 Express의 요청 객체(request)에 추가합니다.
  5. 이후 미들웨어 또는 라우터 핸들러에서 req.file을 통해 업로드된 파일에 접근할 수 있게 됩니다.
  6. 개발자는 req.file을 사용하여 업로드된 파일을 원하는 대로 처리하거나 저장할 수 있습니다.

Express Multer 사용 예시:
아래는 Express Multer를 사용하여 파일 업로드를 처리하는 간단한 예제입니다.

const express = require('express');
const multer = require('multer');
const app = express();

// 파일을 임시 디렉토리에 저장하기 위한 Multer 미들웨어 설정
const storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/');
  },
  filename: function (req, file, cb) {
    cb(null, file.fieldname + '-' + Date.now());
  },
});

// multer 미들웨어 생성
const upload = multer({ storage: storage });

// 파일 업로드 처리 라우터
app.post('/upload', upload.single('file'), (req, res) => {
  // 업로드된 파일 정보는 req.file을 통해 접근 가능
  console.log(req.file);
  res.send('파일 업로드 성공!');
});

app.listen(3000, () => {
  console.log('서버가 3000번 포트에서 실행중입니다.');
});

위 예제에서 upload.single('file') 미들웨어는 하나의 파일만 업로드하는 경우를 처리합니다. 파일은 'uploads/' 디렉토리에 임시로 저장되며, 업로드된 파일 정보는 req.file을 통해 접근할 수 있습니다. 이렇게 간단히 Express Multer를 사용하여 파일 업로드 기능을 구현할 수 있습니다.

1개의 댓글

comment-user-thumbnail
2023년 7월 19일

정말 잘 읽었습니다, 고맙습니다!

답글 달기