必要:首先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(); })
不清楚可以下面留言交流