본문 바로가기
프로그래밍/Web

node.js, express 파일 업로드 처리하기

by 사악신 2014. 6. 30.


보통 node.js 로 파일 업로드를 처리할 때, bodyParser 를 많이 사용합니다. 하지만, 아래 포스팅을 읽어보면 별 생각없이 사용한 이 방법에 문제가 있다는 것을 알 수 있습니다.


http://andrewkelley.me/post/do-not-use-bodyparser-with-express-js.html


실제~ 서버 임시 디렉토리에 모든 POST 요청에 대하여 쓰레기 파일들이 생성되어있음을 확인할 수 있습니다.



하여, 기존 소스를 변경해보았습니다.


이전

app.use(express.bodyParser());


이후

app.use(express.json());

app.use(express.urlencoded());


그리고, multipart 처리를 위하여 formidable 을 사용하였습니다.


npm install formiadable@latest


각 이벤트 처리와 생성된 임시파일을 정리하는 부분은... 대충 이런 느낌이랄까요?^^ 물론, 예외 처리 및 기타 로직은 상황에 맞게 재작성할 필요가 있겠습니다.


app.post('/post', function(req, res){

var form = new formidable.IncomingForm();

form.uploadDir = 'tmp_upload'; // 임시 파일이 생성될 디렉토리

form.keepExtensions = true; // 파일 확장자를 남길것인가.


form.on('field', function(name, value){


});


form.on('fileBegin', function(name, file){


});


form.on('file', function(name, file){


});


form.on('progress', function(bytesReceived, bytesExpected){


});


form.on('aborted', function(){


});


form.on('error', function(err){


});


form.on('end', function(){


});


form.parse(req, function(err, fields, files){

if(files.uploadfile.size > 0){

fs.readFile(files.uploadfile.path, function(err, data){

var filePath = '저장할 파일명';

fs.writeFile(filePath, data, function(err) {

// 임시 파일 삭제

fs.unlink(files.uploadfile.path, function(error){


});


if(err) {

throw err;

}else{

  // 작업....

});

}

});

});

}else {

fs.unlink(files.uploadfile.path, function(err){

// 임시 파일 삭제

});

}

});

});

});


이렇게 소스를 바꾸고 나니, connect limit 관련 경고 메시지도 안나오는군요.




반응형

댓글