Node js 파일 업로드
Node js는 모듈을 설치하여 복잡한 기능을 쉽게 구현할 수 있게 해놨다.
npm 명령어를 통해 설치하여 사용할 수 있는 모듈들은 점점 늘어나고 있다.
그 중 Node js 에서 서버를 구동할 때 , 사용하는 두 가지의( 현재 내가 아는건 두 가지 ) 모듈들이 있는데 http 와 express 이다.
http 모듈보다 express 모듈이 더 많은 기능을 미들웨어등을 통해 구현하고 있기때문에 express 모듈로 진행한다.
요구사항 : express, fs (file-system), connect-multiparty
connect-multiparty 가 파일 업로드에 있어서 꼭 필요한 모듈이다.
body-parser로 읽을 수 있는 정보는 application/x-www-form-urlencoded 방식.
파일 업로드를 할 때에는 enctype 이 multipart/form-data 이기 때문에
connect-multiparty 가 필요하다.
순서 :
var express = require('express'); //익스프레스 모듈을 가져온다.
var fs = require('fs'); // 파일시스템 모듈을 가져온다.
var multiparty = require('connect-multiparty'); // 멀티파티 모듈을 가져온다.
var test = express(); // 서버를 생성한다.
test.use(multiparty({uploadDir: __dirname +'/upload'})); // 멀티파티 모듈설정 .
//위의 모듈 설정을 통해 업로드된 파일은 해당파일이있는 경로/upload 디렉토리에
//저장된다.
__dirname, __filename 은 REPL에서는 확인할 수 없는 전역변수로
현재경로, 현재경로와 파일명에 대한 정보를 갖고있다.
서버가 get요청을 받았을 때 처리,
req 는 요청메세지, res는 응답메세지 객체이다.
test.get('/',function(req,res){
fs.readFile('upload.html',function(err,data){
res.send(data.toString()); //클라이언트로부터 '/' 경로에서 get방식으로
//요청받으면 현재디렉토리의 upload.html 파일을 읽어
//응답객체에 담아보낸다.
});
});
test.post('/',function(req,res){ // '/' 경로에 post요청을 받았을때,
var file = req.files.file; // '요청메세지'.'files'.'폼태그input name 키값'
var type = file.type; // image인지 application 인지 파일의 타입을 확인가능.
var name = file.name //업로드하는 파일의 파일명.확장자 확인
var path = file.path
var filePath = __dirname+'/upload/'+name; // 저장할 파일명 지정.
//위의 정보들을 DB에 저장하여 업로드한 유저의 프로필사진등으로 지정가능.
// 업로드폴더의 파일의 이름을 지정한이름으로변경
fs.rename(path,filePath,function(err){
res.redirect('/'); //업로드된 파일명 변경 후 다시 업로드 웹페이지로 이동
});
});
test.listen(포트번호,function(){
//'서버 구동시 동작시킬 코드'
//ex) console.log('server is running now');
});