在express项目中使用formidable & multiparty实现文件上传
安装 formidable,multiparty 模块
npm install formidable,multiparty –save -d
表单上传
<form id="addForm" enctype="multipart/form-data">
<fieldset>
<h3>创建用户</h3>
姓名:<input type="text" name="name" placeholder="请输入姓名"/>
<br> <br>
头像:<input type="file" name="icon" multiple="multiple">
<br> <br>
<input type="button" onclick="submit1()" value="提交(formidable处理)"/>
<input type="button" onclick="submit2()" value="提交(multiparty处理)"/>
<br> <br>
</fieldset>
</form>
ajax将表单内容发送至后台接口:
<script src="/js/jquery-1.9.1.min.js"></script>
<script>
function submit1(){ var data = new FormData($('#addForm')[0]); //获取表单内容 ajaxFormPost("/api/user/addUser_with_formidable",data,function(data){ //ajax提交表单
console.log("formidable处理结果:",data); alert(data.code+":"+data.msg); }); } function submit2(){
var data = new FormData($('#addForm')[0]); //获取表单内容 ajaxFormPost("/api/user/addUser_with_multiparty",data,function(data){ //ajax提交表单
console.log("multiparty处理结果:",data); alert(data.code+":"+data.msg); });
} //ajax Post方法封装
function ajaxFormPost(url,formData,callBack){
$.ajax({
type:'POST',
dataType:'text',
processData: false, // 告诉JSLite不要去处理发送的数据
contentType: false, // 告诉JSLite不要去设置Content-Type请求头
data:formData,
url:url,
success:function(data){
data = JSON.parse(data);
callBack(data);
},
error:function(data){
console.log('error:',data)
callBack(data);
}
});
} </script>
注意:express项目中app.js一定引入body-parser模块
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // form表单解析必须
app.use(bodyParser.urlencoded({ extended: false }));
方式1:formidable解析表单关键代码
exports.formidableFormParse = function(req,callback){
var form = new formidable.IncomingForm({
encoding:"utf-8",
uploadDir:"public/upload", //文件上传地址
keepExtensions:true //保留后缀
});
form.parse(req, function(err, fields, files) {
var obj ={};
Object.keys(fields).forEach(function(name) { //文本
console.log('name:' + name+";filed:"+fields[name]);
obj[name] = fields[name];
});
Object.keys(files).forEach(function(name) { //文件
console.log('name:' + name+";file:"+files[name].path);
obj[name] = files[name];
});
callback(err,obj);
});
}
返回值obj内容:
|
{ |
方式2:multiparty解析表单关键代码
exports.multipartyFormParse = function(req,callback){
var form = new multiparty.Form({
encoding:"utf-8",
uploadDir:"public/upload", //文件上传地址
keepExtensions:true //保留后缀
})
form.parse(req, function(err, fields, files) {
var obj ={};
Object.keys(fields).forEach(function(name) { //文本
console.log('name:' + name+";filed:"+fields[name]);
obj[name] = fields[name];
});
Object.keys(files).forEach(function(name) { //文件
console.log('name:' + name+";file:"+files[name]);
obj[name] = files[name];
});
callback(err,obj);
});
}
返回值obj的内容(一个文件时):
|
{ |
返回值(多个文件时 ):
|
{ |
总结:
formidable和multiparty都能实现解析表单的功能,返回值的数据结构和字段名称稍有不同。
formidable解析结果是json数据格式的。multiparty 返回值是数组格式的,解析同一个字段多个值时,比如上传多张图片,使用multiparty更合适。
文件将被上传到public/upload目录下,如果要移动文件位置,可以使用fs模块的rename方法。
Github项目地址: https://github.com/wuwanyu/formidable_multiparty_demo
项目运行效果图
(1)formidable表单上传及处理结果:

(2)multipaty表单上传及处理结果:

在express项目中使用formidable & multiparty实现文件上传的更多相关文章
- 在 .NET Core项目中使用UEditor图片、文件上传服务
在.NET Framework中使用UEditor时,只需要将UEditor提供的后端服务,部署为一个子程序,即可直接使用文件上传相关的服务,但是UEditor官方并未提供.Net Core的项目,并 ...
- .net core 3.0web_razor page项目_使用中间件接受大文件上传报错_httpRequest.Form threw an exception of type Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException_Request body too large
前言:在web项目的.net framework时文件上传时,自己常用一般处理程序接受上传文件,上传文件的大小限制是可以项目的webconfig里配置. 到core项目使用一般处理程序变成了中间件 ...
- 在Express中使用Multiparty进行文件上传及POST、GET参数获取
Express 版本:4.14.1 在Express中,文件上传需要用到multiparty中间件,在项目目录中,通过npm install multiparty –save进行安装必要组件. 前端H ...
- 在ASP.NET项目中使用CKEditor +CKFinder实现图片上传功能
前言 之前的项目中一直使用的是FCKeditor,昨天突然有个想法:为什么不试一下新的CKEditor呢?于是花了大半天的时间去学习它的用法,现在把我的学习过程与大家分享一下. 谈起FCKeditor ...
- 【原创】MVC项目中使用JQuery的upladify图片上传插件相关问题的解决方案
一. 关于Uploadify Uploadify是一个jQuery插件,你可以很容易的为你的网站添加多个文件上传功能.有两个不同的版本(HTML5和Flash)允许你灵活选择为您的网站和回退方法正确实 ...
- SpringMVC案例3----spring3.0项目拦截器、ajax、文件上传应用
依然是项目结构图和所需jar包图: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmVuamFtaW5fd2h4/font/5a6L5L2T/fontsi ...
- 讲解开源项目:功能强大的 JS 文件上传库
本文作者:HelloGitHub-kalifun HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
- JavaEE开发之SpringMVC中的自定义消息转换器与文件上传
上篇博客我们详细的聊了<JavaEE开发之SpringMVC中的静态资源映射及服务器推送技术>,本篇博客依然是JavaEE开发中的内容,我们就来聊一下SpringMVC中的自定义消息转发器 ...
- 【SSH网上商城项目实战13】Struts2实现文件上传功能
转自:https://blog.csdn.net/eson_15/article/details/51366384 上一节我们做完了添加和更新商品的功能,这两个部分里有涉及到商品图片的上传,并没有详细 ...
随机推荐
- Lua整理——table库
table属性 table库是有一些辅助函数构成的,这些函数将table作为数组来操作. 当中.有对列表中插入和删除元素的函数,有对数组元素进行排序的函数.还有对链接一个数组中全部字符串的函数. 0. ...
- ny47 过河问题
过河问题 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 在漆黑的夜里,N位旅行者来到了一座狭窄而且没有护栏的桥边.如果不借助手电筒的话,大家是无论如何也不敢过桥去的 ...
- ios应用下架方法(说明)
ios应用下架方法(说明) 正在审核中的: 在binary details里边 reject按钮 已经上架的: 在itunesconnect里的app详情里面找到rights and pricin ...
- Spring4.0系列9-websocket简单应用
http://wiselyman.iteye.com/blog/2003336 ******************************************* Spring4.0系列1-新特性 ...
- JS中split用法和数组中元素的删除
JS中split用法 <script language="javascript"> function spli(){ datastr="2,2,3,5,6,6 ...
- C# 延时函数 非Sleep
1.示例: using System.Runtime.InteropServices; [DllImport("kernel32.dll")] static extern uint ...
- How To Install and Configure Elasticsearch on Ubuntu 14.04
Reference: https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsear ...
- gdb常用
调试信息条件:-g或-gdbgcc -g -o test test.cgcc -ggdb3 -o test test.cggdb3告诉gcc,使用gdb的扩展产生调试符号.其中“3”表示使用的是第三 ...
- linux 批量创建用户获取8位随机密码
#创建账号 分组不分组只有一列useradd无法添加三个账号 添加账号 获取密码 执行最后一句echo stu{4..6}|xargs -n 1|sed -r 's#(.*)#useradd \ ...
- mybatis 一对多关系
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "- ...