express에서는 파일을 업로드할때 미들웨어를 사용한다.


multer 

express를 이용해서 파일을 저장하는 모듈


app_file.js

 

var express = require('express');

var fs = require('fs'); var bodyParser = require('body-Parser'); var multer = require('multer'); var upload = multer({dest:'uploads/'}) //업로드가 가능한 미들웨어를 담는 함수 //dest: 는 경로 var app = express(); app.use(bodyParser.urlencoded({ extended : true})); app.locals.pretty = true; app.set('views','views_file'); app.set('view engine','jade');

//파일업로드 폼 app.get('/upload',function(req,res){ console.log('upload GET') res.render('upload'); }); // single함수의 역할은 사용자가 전송한 데이터에 파일이 포함된다면 파일을 request에 전달한다. app.post('/upload',upload.single('userfile'),function(req,res){ console.log('upload POST') console.log(req.file); res.send('uploaded : '+req.file.filename) });


var multer = require('multer'); var upload = multer({dest:'uploads/'})m

multer 모듈을 require 하고 변수에 담는다. dest에는 파일을 저장할 경로명을 지정한다.
app.post('/upload',upload.single('userfile'),function(req,res)
app.post에 두번째 인자로 single함수를 전달한다. 이함수의 역할은 전송한 데이터에 파일이 포함된다면
request 에 file 이라는 프로퍼티에 파일의 정보를 전달한다. 
console.log(req.file); 결과




uplode.jade

 

doctype html

html head meta(chartset='') body form(action='/upload' method ='post' enctype = "multipart/form-data") input(type='file' name = 'userfile') input(type = 'submit')


파일업로드 폼은 enctype = "multipart/form-data" 속성을 주어야한다.


파일명 원본으로 업로드 방법

multer는 기본으로 랜덤의 파일명을 생성해 업로드한다. 이것을 파일명으로 업로드하려면

multer의 옵션을 변경해야 한다.


 

var express = require('express');

var fs = require('fs'); var bodyParser = require('body-Parser'); var multer = require('multer'); var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') //경로 지정 콜백함수 }, filename: function (req, file, cb) { cb(null, file.originalname + '-' + Date.now()) //파일명 지정 콜백함수 } }) var upload = multer({ storage: storage }); var app = express(); app.use(bodyParser.urlencoded({ extended : true})); app.locals.pretty = true; app.set('views','views_file'); app.set('view engine','jade'); app.get('/upload',function(req,res){ console.log('upload GET') res.render('upload'); }); app.post('/upload',upload.single('userfile'),function(req,res){ console.log('upload POST') console.log(req.file); res.send('uploaded : '+req.file.filename) });


storage변수에 콜백함수로 경로와 파일명을 지정

var storage = multer.diskStorage({ destination: function (req, file, cb) { cb(null, 'uploads/') //경로 지정 콜백함수 } filename: function (req, file, cb) { cb(null, file.originalname + '-' + Date.now()) //파일명 지정 콜백함수 } })


옵션지정

var upload = multer({ storage: storage });



'Node.js' 카테고리의 다른 글

cookie-parser  (0) 2017.02.27
node.js mysql 접속/SELECT/INSERT  (0) 2017.02.27
EJS 템플릿 엔진 / include  (0) 2017.02.26
post 방식 데이터 전달 / 사용  (0) 2017.02.26
URL을 이용한 get방식 데이터 전달 / 사용  (0) 2017.02.26

+ Recent posts