node.js에서 파일업로드 처리시 임시파일 생성하지 않기

2019-09-02

웹 브라우저에서 파일 업로드를 처리하는 가장 일반적인 방법은 multipart/form-data를 이용해서 http post메소드의 body에 파일데이터를 함께 전송하는 방법이다. 대부분의 웹애플리케이션의 경우 이렇게 전송받은 파일을 임시폴더에 파일로 저장한 다음 계속 처리를 하는 것이 보통이다. 하지만 파일정보를 저장하지 않고 다른 시스템에 전달하는 경우, 임시파일을 생성하지 않고 메모리에 있는 정보를 바로 전송하는 것이 효율적일 수 있다.

muuter의 MemoryStorage 사용 방법

여기에서는 node.js, express로 구성된 애플리케에션에 multer 미들웨어를 이용해서 메모리에 파일정보를 저장하고 처리하는 방법을 정리하고자 한다.

var express = require('express');
var multer  = require('multer');

var upload = multer({ storage: multer.memoryStorage() });
var app = express();

app.post('/upload', upload.single('avatar'), function (req, res, next) {
  // req.file is the `avatar` file
  // req.body will hold the text fields, if there were any

})

이와 같이 구성시 /upload로 들어온 요청에서 avater이라는 이름의 파일 필드를 찾아 하나의 파일만 메모리에 파싱한다.

이 때 파일 데이터는 req.file.buffer에 저장되어 있으며, Buffer 타입이므로 타 시스템에 전송시 Base64등으로 문자열로 변환후 처리한다거나 하는 작업이 필요 할 수 있다.

참고링크

  • https://github.com/expressjs/multer/blob/master/doc/README-ko.md#memorystorage
  • https://stackoverflow.com/questions/50736447/consume-content-of-the-file-without-saving-the-file-with-express-js