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