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
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 |