在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 上一节我们做完了添加和更新商品的功能,这两个部分里有涉及到商品图片的上传,并没有详细 ...
随机推荐
- 自己用的C++编码规范
头文件结构 #ifndef COMMUNICATERHANDLLER_H #define COMMUNICATERHANDLLER_H #include "ace/Guard_T.h&quo ...
- 在 Linux 上使用 Nginx 和 Gunicorn 托管 Django 应用
介绍 托管 Django Web 应用程序相当简单,虽然它比标准的 PHP 应用程序更复杂一些. 让 Web 服务器对接 Django 的方法有很多. Gunicorn 就是其中最简单的一个. Gun ...
- C程序-进程内存结构分析
1. 每个进程都运行在自己私有的内存空间中(即虚拟地址空间).在32位系统中,4GB的进程地址东健被分为用户空间和内核空间两个部分.用户空间占据着0~3GB(用16进制表示为0xC0000000),而 ...
- [Golong]学习笔记(一) 基础知识
Go编程基础 Go的内置keyword(25个) 不多 break default func interface select case defer go map struct chan else g ...
- Can you share some Scala List class examples?
Scala List FAQ: Can you share some Scala List class examples? The Scala List class may be the most c ...
- CPAN镜像使用帮助
https://lug.ustc.edu.cn/wiki/mirrors/help/cpan ************************************************** 使用 ...
- rpm信息查看
rpm -qpi xxx.rpm #查看rpm包相关信息,一般有版本,build日期,功能描述,大小,公司等等 rpm -qpl xxx.rpm #查看rpm包含安装的目录和文件 rpm -qpc ...
- LTDC/DMA2D—液晶显示
本章参考资料:<STM32F4xx 参考手册 2>.<STM32F4xx 规格书>.库帮助文档<stm32f4xx_dsp_stdperiph_lib_um.chm> ...
- 如何用Visual Studio 2013 (vs2013)编写C语言程序
如何用Visual Studio 2013 (vs2013)编写C语言程序 (2014-05-16 10:58:15) Visual Studio 2013是一个很强大的软件,但是刚开始用Visu ...
- excel自定义函数添加和使用方法
第一,excel自定义函数简介 Excel自带很多函数供使用,但有些问题用内置函数解决起来很复杂,甚至是无能为力,这时就可以利用VBA开发自定义函数. 第二,excel如何添加自定义函数 excel自 ...