基于nodejs+express(4.x+)实现文件上传功能


Posted in NodeJs onNovember 23, 2015

Nodejs是一个年轻的编程框架,充满了活力和无限激情,一直都在保持着快速更新。基于Nodejs的官方Web开发库Express也在同步发展着,每年升级一个大版本,甚至对框架底层都做了大手术。在Express4时,替换掉中件间库connect,而改用多个更细粒度的库来取代。带来的好处是明显地,这些中间件能更自由的更新和发布,不会受到Express发布周期的影响;但问题也是很的棘手,不兼容于之前的版本,升级就意味着要修改代码。

通过一段时间的查阅资料、摸索,我发现实现上传的方式有:1.express中间件multer模块(此效率最高,在express3.x原生支持,到了express4.x独立成一个模块了),2.connect-multiparty模块(但现在 官方不推荐 ),3.使用multiparty模块实现(此方法比较普遍),4.使用formidable插件实现(插件呢,就是简单易懂);

最简单的做法是通过“connect-multiparty”中间件实现上传。

通过在项目中npm install connect-multiparty进行安装。

用法:

var multipart = require('connect-multiparty');
var multipartMiddleware = multipart();
app.post('/upload', multipartMiddleware, function(req, resp) {
 console.log(req.body, req.files);
 // don't forget to delete all req.files when done 
});

上传后,上传的文件会在临时目录中生成一个临时文件,具体可将req.files打印出查看具体文件路径。

只要在注释的地方将临时文件移动并重命名到实际目录中即可完成上传功能。

简单。

官方地址:https://www.npmjs.com/package/connect-multiparty

但是官方不建议使用该中间件,建议直接使用“multiparty”,因为错误处理比较麻烦。

下面就用“multiparty”实现一个版本。

1.使用express(版本是4.11.x)创建一个项目,采用默认的jade作为模版引擎。

2.在项目目录中,通过npm install multiparty进行安装必要组件。

3.修改views/index.jade,如下做一个简单的用于文件上传的form。

extends layout
  block content                       form(method='post', action='/file/uploading', enctype='multipart/form-data')
    input(name='inputFile', type='file', multiple='mutiple')
    input(name='btnUp', type='submit',value='上传')

 4.修改routes/index.js,实现上传页面和上传响应的后台代码。

var express = require('express');                                                                                                                      
  var router = express.Router();
  var multiparty = require('multiparty');
  var util = require('util');
  var fs = require('fs');
  /* 上传页面 */
  router.get('/', function(req, res, next) {
   res.render('index', { title: 'Express' });
 });
 /* 上传*/
 router.post('/file/uploading', function(req, res, next){
  //生成multiparty对象,并配置上传目标路径
  var form = new multiparty.Form({uploadDir: './public/files/'});
  //上传完成后处理
  form.parse(req, function(err, fields, files) {
   var filesTmp = JSON.stringify(files,null,);
   if(err){
    console.log('parse error: ' + err);
   } else {
    console.log('parse files: ' + filesTmp);
    var inputFile = files.inputFile[];
    var uploadedPath = inputFile.path;
    var dstPath = './public/files/' + inputFile.originalFilename;
    //重命名为真实文件名
    fs.rename(uploadedPath, dstPath, function(err) {
     if(err){
      console.log('rename error: ' + err);
     } else {
      console.log('rename ok');
     }
    });
   }
   res.writeHead(, {'content-type': 'text/plain;charset=utf-'});
   res.write('received upload:\n\n');
   res.end(util.inspect({fields: fields, files: filesTmp}));
  });
 });
 module.exports = router;

完成。基于nodejs+express(4.x+)实现文件上传功能就全部介绍完了,希望对大家学习nodejs express相关知识有所帮助。

NodeJs 相关文章推荐
用nodejs访问ActiveX对象,以操作Access数据库为例。
Dec 15 NodeJs
我的NodeJs学习小结(一)
Jul 06 NodeJs
基于promise.js实现nodejs的promises库
Jul 06 NodeJs
使用nodejs、Python写的一个简易HTTP静态文件服务器
Jul 18 NodeJs
NodeJS中利用Promise来封装异步函数
Feb 25 NodeJs
Nodejs如何搭建Web服务器
Mar 28 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
nodejs的HTML分析利器node-jquery用法浅析
Nov 08 NodeJs
Ajax异步文件上传与NodeJS express服务端处理
Apr 01 NodeJs
Nodejs中使用captchapng模块生成图片验证码
May 18 NodeJs
nodejs判断文件、文件夹是否存在及删除的方法
Nov 10 NodeJs
详解NODEJS的http实现
Jan 04 NodeJs
Nodejs Express4.x开发框架随手笔记
Nov 23 #NodeJs
Nodejs的express使用教程
Nov 23 #NodeJs
nodejs初步体验篇
Nov 23 #NodeJs
Nodejs初级阶段之express
Nov 23 #NodeJs
基于html5和nodejs相结合实现websocket即使通讯
Nov 19 #NodeJs
浅析nodejs实现Websocket的数据接收与发送
Nov 19 #NodeJs
Nodejs实战心得之eventproxy模块控制并发
Oct 27 #NodeJs
You might like
CI框架中zip类应用示例
2014/06/17 PHP
php+jQuery.uploadify实现文件上传教程
2014/12/26 PHP
js no-repeat写法 背景不重复
2009/03/18 Javascript
JSON JQUERY模板实现说明
2010/07/03 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
js里怎么取select标签里的值并修改
2012/12/10 Javascript
js倒计时小程序
2013/11/05 Javascript
jQuery带时间的日期控件代码分享
2015/08/26 Javascript
基于Jquery制作图片文字排版预览效果附源码下载
2015/11/18 Javascript
JavaScript实现简洁的俄罗斯方块完整实例
2016/03/01 Javascript
浅谈JavaScript 浏览器对象
2016/06/03 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
vue-cli2.0转3.0之项目搭建的详细步骤
2018/12/11 Javascript
微信小程序实现拖拽功能
2019/09/26 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
es6函数name属性功能与用法实例分析
2020/04/18 Javascript
Vue自定义表单内容检查rules实例
2020/10/30 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
[59:59]EG vs IG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
使用python绘制人人网好友关系图示例
2014/04/01 Python
Mac中升级Python2.7到Python3.5步骤详解
2017/04/27 Python
浅谈python中列表、字符串、字典的常用操作
2017/09/19 Python
python程序变成软件的实操方法
2019/06/24 Python
详细介绍pandas的DataFrame的append方法使用
2019/07/31 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
html5 迷宫游戏(碰撞检测)实例一
2013/07/25 HTML / CSS
2014年五一活动策划方案
2014/03/15 职场文书
感恩之星事迹材料
2014/05/03 职场文书
印刷技术专业自荐信
2014/09/18 职场文书
故意杀人案辩护词
2015/05/21 职场文书
班级联欢会主持词
2015/07/03 职场文书
2015年医院保卫科工作总结
2015/07/23 职场文书
运动会广播稿100字
2015/08/19 职场文书
日元符号 ¥
2022/02/17 杂记
Python四款GUI图形界面库介绍
2022/06/05 Python