必要:首先multer模塊應用前提是在HTML的form表單中
標簽內設置屬性enctype=”multipart/form-data”是必須的,這樣才可以上傳文件,方式為post。
<form action="/getdata" method="post" enctype="multipart/form-data"> ... </form>
其次 使用npm命令 下載multer模塊:
$npm install multer -save
在項目js中 添加引用:
var multer = require('multer'); var upload = multer({dest:'uploads/'}); app.use(multer({dest:"./uploads"}).array("file"));
dest:目的地 包括后面的uploads文件夾可以自己定義 默認路徑是整個項目文件夾
array()內是你要上傳的file類型input標簽的name名稱
<input type="file" id="exampleInputFile" name="file">
我們回到路由中(默認index.js/user.js)把multer模塊引用進去
var express = require('express'); var router = express.Router(); var multer = require('multer'); var fs = require('fs'); var path = require('path'); var mysql = require('mysql') var upload = multer({ dest: 'uploads/' });
接下來我們一步一步的分析代碼:
router.post('/getdata',function(req,res){ //設置表單提交的路由地址,並且接收req/返回res給客戶端的操作 console.log(req.body); var name = req.body.name; var email = req.body.email; //post傳輸方法要用body console.log(req.files); var load=path.join(__dirname,'..'); console.log(load); var fname=req.files[0].filename;//獲取上傳文件的名字 var oname=req.files[0].originalname;//獲取上傳文件的原始名字
//var load=path.join(__dirname,'..');返回上一層的地址這里用變量load接收了
fs.readFile(load+'/uploads/'+fname,function(err,data){ //文件上傳后默認是一堆字符串的名字並且沒有后綴名稱的未知格式文件,這里我們要用req.files查看原始文件的數據並且讀取,待讀取成功后進行下一步操作 console.log(data); fs.writeFile('./public/uploads/'+oname,data,function(err,data){ //寫入文件 if(!err){
console.log('寫入成功!') }else{ console.log(err); } }) })
//鏈接數據庫並且寫入數據內容(選看) var connection = mysql.createConnection({ host:'127.0.0.1', user:'root', password:'root', database:'web5' }) connection.connect(function(err){if(err){console.log(err)}}); connection.query('insert into porject(name,email,files)values(?,?,?)',[name,email,oname],function(err,data){ if(!err){ res.render('getdata',{title:'文件已保存至服務器'}) } }) connection.end(); })
不清楚可以下面留言交流