解决表单enctype="multipart/form-data" 时获取不到Input值的问题

node自带querystring无法获取

formidable除了文件无法获取

multer可以获取

今天在学习node踩到一个坑:form设置enctype="multipart/form-data"上传文件时,无法获取到表单其他input的值。

因为之前上传文件用的是formidable

方法1:formidable(无法获取其他input的值)

引包 app.js

varapp =express();varexpress = require("express");

var router = require("./controller"); //前端MVC的C 一个顶层变量

解决表单enctype=

controller/package.json

{"main" :"router.js"}

POST请求 app.js:

app.post("/file_upload",router.uploadfile);

controller/router:

exports.uploadfile=function(req,res){//console.log(req.route);var form =newformidable.IncomingForm();

form.encoding= 'utf-8';

form.uploadDir= "./uploads";//上传路径form.parse(req, function(err, fields, files) {//表单上传到东西在fields 文件在files里面//更改文件名var timeStr = (Math.floor(Math.random()*9000+1000)).toString();

var d= sd.format(newDate(),'YYYYMMDDHHmmss'+timeStr);

var folder=fields.folder;

var extname= path.extname(files.file.name);//文件类型var oldName =files.file.path;

var newName= "./public/image/"+folder+"/"+d +extname;

console.log(newName);

console.log(folder);

fs.rename(oldName,newName);//成功页res.send("返回");

});

}

views/up.ejs

上传

但是这种方法无法获取到form表单其他input的值

方法2:multer(可以获取)

引包 app.js

varexpress = require('express');varpath = require('path');varindex = require('./routes/index');varfs = require('fs');varmulter = require('multer');

解决表单enctype=

app.js

app.use('/', index);varstorage =multer.diskStorage({destination:function(req, file, cb) {

cb(null, './uploads')  //设定文件上传路径

},//给上传文件重命名,获取添加后缀名filename:function(req, file, cb) {

console.log(file.originalname)//上传文件的名字console.log(file.mimetype)//上传文件的类型console.log(file.fieldname)//上传文件的Input的name名console.log(file.encoding)//编码方式varfileFormat = (file.originalname).split("."); //采用分割字符串,来获取文件类型

console.log(fileFormat)varextname =path.extname(file.originalname); //path下自带方法去获取文件类型

console.log(extname);//cb(null, file.fieldname + '-' + Date.now() + "." + fileFormat[fileFormat.length - 1]); //更改名字cb(null, file.fieldname + '-' + Date.now() +extname); //更改名字

}

});varupload =multer ({storage:storage}) //定制化上传参数

app.post('/upload', upload.array('logo',2),function(req, res, next){

console.log(req.body.txt)

res.send({ret_code:'0'});

});

views/index.ejs

单图上传

multer包成功解决了无法获取到表单其他input的值的问题。

参考http://www.cnblogs.com/dirkhe/p/7354886.html

你可能感兴趣的:(解决表单enctype="multipart/form-data" 时获取不到Input值的问题)