카테고리 없음

Node js 파일 업로드

PaulGo 2017. 7. 19. 16:24

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

});