目录
1. 页面form是有text类型和file类型输入框,所以需要将form提交类型设置为enctype="multipart/form-data" method="post"
2.普通的参数只需要req.body.id就可以取到,而文件在这种状态下只有一个文件名,enctype="multipart/form-data",可以传输文件,但node不可以使用req.body.id来接受数据。
需要用到插件multiparty。
1. 页面form是有text类型和file类型输入框,所以需要将form提交类型设置为enctype="multipart/form-data" method="post"
<form action="/article/add" enctype="multipart/form-data" method="post"><input type="hidden" name="id" value="<%- item.id %>"><input type="hidden" name="page" value="<%- item.page %>"><div class="inputTitle">请上传封面文件</div><input type="file" name="coverImg"><div class="inputTitle">新闻内容:</div><textarea name="content" class="xheditor"><%- item.content %></textarea><% if (item.id) { %><input type="submit" value="修改"><%} else {%><input type="submit" value="发布"><%}%></form>
2.普通的参数只需要req.body.id就可以取到,而文件在这种状态下只有一个文件名,enctype="multipart/form-data",可以传输文件,但node不可以使用req.body.id来接受数据。
需要用到插件multiparty。
1.安装插件,
2.引入到当前文件
var multiparty = require('multiparty');
3.使用
新建multiparty.Form()对象form
form的parse方法将req请求作为第一个参数,第二个参数是回调函数,在函数中:
三个参数是报错信息,普通参数数组,文件数组
普通参数id获取方式:
var id = parseInt(fields.id[0])
var newsType = parseInt(fields.newsType[0]) || 0
文件获取:
var file = files.coverImg[0]
var form = new multiparty.Form()form.parse(req, function(err, fields, files) {if (err) {//console.log('上传失败', err);} else {var id = parseInt(fields.id[0])//console.log('id:',id)var newsType = parseInt(fields.newsType[0]) || 0var file = files.coverImg[0]}
这个方法是将文件存到服务器:
uploadsCover(file, dirName),第一个参数是文件,第二个参数是文件夹名字。
如:公司新闻动态的文件file 放在covers下面的company文件夹下:uploadsCover(file, 'company'),
会返回cover是文件名字,将文件名存储到数据库,前端可以通过名字cover访问到;
其中使用了fs核心模块,需要进行导入:
var fs = require('fs');
function uploadsCover(file, dirName){// var file = files.coverImg[0]// console.log(file)var rs = fs.createReadStream(file.path)var cover = dirName + file.originalFilename// console.log('cover:'+cover)var newPath = '/covers/'+ cover// console.log(newPath, '进行写文件')var ws = fs.createWriteStream('./public' + newPath)rs.pipe(ws)ws.on('finish', function() {// console.log('文件上传成功')// res.send({err: '', msg: newPath})})return cover}
nodejs 处理表单提交文件和普通参数(enctype=“multipart/form-data“) 使用插件multiparty 将图片上传到服务器的文件夹中