700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > node进阶| 解决表单enctype=multipart/form-data 时获取不到Input值的问题

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

时间:2019-08-22 06:52:15

相关推荐

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

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

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

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

引包 app.js

var app = express();var express = require("express");

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

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 = new formidable.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(new Date(),'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("<a href = '/'>返回</a>");});}

views/up.ejs

<form style="width:40%;" method="post" action="/file_upload" enctype="multipart/form-data"><input type="file" id="exampleInputFile" name="file"><input type="submit" class="btn btn-default">上传</input></form>

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

方法2:multer(可以获取)

引包 app.js

var express = require('express');var path = require('path');var index = require('./routes/index');var fs = require('fs');var multer = require('multer');

app.js

app.use('/', index);var storage = 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) // 编码方式var fileFormat = (file.originalname).split("."); //采用分割字符串,来获取文件类型console.log(fileFormat)var extname = 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); //更改名字}});var upload = 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

<form action="/upload" method="post" enctype="multipart/form-data"><h2>单图上传</h2><input type="file" name="logo"><input type="file" name="logo"><input type="text" name="txt"><input type="submit" value="提交"></form>

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。