Node.js 파일 업로드


강력한 모듈

"Formidable"이라는 파일 업로드 작업을 위한 아주 좋은 모듈이 있습니다.

Formidable 모듈은 NPM을 사용하여 다운로드 및 설치할 수 있습니다.

C:\Users\Your Name>npm install formidable

Formidable 모듈을 다운로드한 후 모든 애플리케이션에 모듈을 포함할 수 있습니다.

var formidable = require('formidable');

파일 업로드하다

이제 Node.js에서 사용자가 컴퓨터에 파일을 업로드할 수 있는 웹 페이지를 만들 준비가 되었습니다.

1단계: 업로드 양식 만들기

업로드 필드가 있는 HTML 양식을 작성하는 Node.js 파일을 만듭니다.

예시

이 코드는 HTML 양식을 생성합니다:

var http = require('http');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/html'});
  res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
  res.write('<input type="file" name="filetoupload"><br>');
  res.write('<input type="submit">');
  res.write('</form>');
  return res.end();
}).listen(8080);

2단계: 업로드된 파일 구문 분석

업로드된 파일이 서버에 도달하면 이를 구문 분석할 수 있도록 Formidable 모듈을 포함합니다.

파일이 업로드되고 구문 분석되면 컴퓨터의 임시 폴더에 저장됩니다.

예시

파일이 업로드되고 임시 폴더에 저장됩니다.

var http = require('http');
var formidable = require('formidable');

http.createServer(function (req, res) {
  if (req.url == '/fileupload') {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
      res.write('File uploaded');
      res.end();
    });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
    res.write('<input type="file" name="filetoupload"><br>');
    res.write('<input type="submit">');
    res.write('</form>');
    return res.end();
  }
}).listen(8080);


3단계: 파일 저장

파일이 서버에 성공적으로 업로드되면 임시 폴더에 저장됩니다.

이 디렉토리의 경로는 parse()메서드의 콜백 함수에서 세 번째 인수로 전달된 "files" 개체에서 찾을 수 있습니다.

파일을 선택한 폴더로 이동하려면 파일 시스템 모듈을 사용하고 파일 이름을 변경합니다.

예시

fs 모듈을 포함하고 파일을 현재 폴더로 이동합니다.

var http = require('http');
var formidable = require('formidable');
var fs = require('fs');

http.createServer(function (req, res) {
  if (req.url == '/fileupload') {
    var form = new formidable.IncomingForm();
    form.parse(req, function (err, fields, files) {
      var oldpath = files.filetoupload.filepath;
      var newpath = 'C:/Users/Your Name/' + files.filetoupload.originalFilename;
      fs.rename(oldpath, newpath, function (err) {
        if (err) throw err;
        res.write('File uploaded and moved!');
        res.end();
      });
 });
  } else {
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write('<form action="fileupload" method="post" enctype="multipart/form-data">');
    res.write('<input type="file" name="filetoupload"><br>');
    res.write('<input type="submit">');
    res.write('</form>');
    return res.end();
  }
}).listen(8080);