보통 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 관련 경고 메시지도 안나오는군요.
'프로그래밍 > Web' 카테고리의 다른 글
Laravel 개발환경 구축하기 - 1 - Windows 7, Sublime Text 2 (2) | 2014.08.26 |
---|---|
Composer & Laravel 설치하기 - CentOS 6.x, nginx, php-fpm (0) | 2014.08.25 |
Ghost 블로그에 댓글 기능을 추가하기 (0) | 2014.05.16 |
sublime text 2, FTP 연동하기....(SFTP 설정) (0) | 2014.02.18 |
크롬 앱(Chrome Apps) 개발 - 1 - (1) | 2014.02.12 |
댓글