最简单的做法是通过“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。

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

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

  1 var express = require('express');
2 var router = express.Router();
3 var multiparty = require('multiparty');
4 var util = require('util');
5 var fs = require('fs');
6
7 /* 上传页面 */
8 router.get('/', function(req, res, next) {
9 res.render('index', { title: 'Express' });
10 });
11
12 /* 上传*/
13 router.post('/file/uploading', function(req, res, next){
14 //生成multiparty对象,并配置上传目标路径
15 var form = new multiparty.Form({uploadDir: './public/files/'});
16 //上传完成后处理
17 form.parse(req, function(err, fields, files) {
18 var filesTmp = JSON.stringify(files,null,2);
19
20 if(err){
21 console.log('parse error: ' + err);
22 } else {
23 console.log('parse files: ' + filesTmp);
24 var inputFile = files.inputFile[0];
25 var uploadedPath = inputFile.path;
26 var dstPath = './public/files/' + inputFile.originalFilename;
27 //重命名为真实文件名
28 fs.rename(uploadedPath, dstPath, function(err) {
29 if(err){
30 console.log('rename error: ' + err);
31 } else {
32 console.log('rename ok');
33 }
34 });
35 }
36
37 res.writeHead(200, {'content-type': 'text/plain;charset=utf-8'});
38 res.write('received upload:\n\n');
39 res.end(util.inspect({fields: fields, files: filesTmp}));
40 });
41 });
42
43 module.exports = router;

完成。

“multiparty”的用法详见:

www.npmjs.com/package/multiparty

github.com/andrewrk/node-multiparty

使用nodejs+express(4.x+)实现文件上传的更多相关文章

  1. nodejs使用multiparty模块实现文件上传(另附express.bodyParser()的说明)

    最近师弟师妹们在用formidable做文件上传的时候会出现form.parse()不会触发的问题,在stackoverflow也没有找到答案,反而是几个答案推荐使用multiparty来代替,因为那 ...

  2. Html5+NodeJS——拖拽多个文件上传到服务器

    实现多文件拖拽上传的简易Node项目,可以在github上下载,你可以先下载下来:https://github.com/Johnharvy/upLoadFiles/. 解开下载下的zip格式包,建议用 ...

  3. Node使用 Express框架,实现文件上传

    一 安装依赖包 npm install multer --save 二 客户端上传文件 <!DOCTYPE html> <html> <head> <meta ...

  4. nodemailer + express + h5 拖拽文件上传 实现发送邮件

    一.部署 1.部署Express 2.准备一个邮箱并开始SMTP服务 二.服务器端 三.客户端 四.效果:

  5. express 4.x 文件上传

    1.安装文件上传模块: npm install multiparty --save 2.在routes/index.js 中添加: // 引用模块 let multiparty = require(& ...

  6. Node.js:上传文件,服务端如何获取文件上传进度

    内容概述 multer是常用的Express文件上传中间件.服务端如何获取文件上传的进度,是使用的过程中,很常见的一个问题.在SF上也有同学问了类似问题<nodejs multer有没有查看文件 ...

  7. 5. 文件上传下载 与 db数据库

    文件上传 formidable multer npm i formidable multer 如何使用见: https://www.npmjs.com/ util.inspect 自己查 文件上传:表 ...

  8. Node.js 博客实例(三)添加文件上传功能

    原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件眼下有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 For ...

  9. Node.js文件上传

    Node.js express使用Multer实现文件上传html部分 <div> <h3>文件上传:</h3> 选择一个文件上传: <br/> < ...

随机推荐

  1. PPT嵌入字体的方法

    使用ppt的时候,很多时候会使用一些特殊字体,在其他计算机上无法正常显示.这个时候就需要导出PPT的时候进行字体嵌入. 1.1 常规方法 所谓常规方法,是指那些字体的许可协议允许随意分发,我们才能导出 ...

  2. InnoSetup 如何获取安装程序的路径?

    两个常量可以使用: {srcexe} 安装程序执行文件的路径.      {src} 安装程序所在路径. path := ExpandConstant('{srcexe}');

  3. 假如现在有一堆长度大于3小于9的电话号码,用座机呼叫,如果出现这样的号码【123和12345】那么12345将永远不会被拨出,因为拨到123的时候电话已经呼出了,试写一个函数输出所有不能被呼出的电话号码(java实现)

    解题: 假如现在有一堆长度大于3小于9的电话号码,用座机呼叫,如果出现这样的号码[123和12345]那么12345将永远不会被拨出,因为拨到123的时候电话已经呼出了,试写一个函数输出所有不能被呼出 ...

  4. 辛巴学院-Unity-剑英陪你零基础学c#系列(一)Hello World

    这不是草稿 辛巴学院:正大光明的不务正业.辛巴学院:攻城狮与荣耀石. 剑英陪你系列又来啦.剑英是一个有大爱的人,热爱每一个程序员,尤其是年轻漂亮的女程序.最近组织朋友们玩了一次即兴团体诗创作,无论怎么 ...

  5. Atitit.数据库存储引擎的原理与attilax 总结

    Atitit.数据库存储引擎的原理与attilax 总结 1. 存储引擎是什么1 2. 其它数据库系统(包括大多数商业选择)仅支持一种类型的数据存储2 3. 表的存储有三个文件:结构+数据+索引2 4 ...

  6. iOS开发——高级技术OC篇&运行时(Runtime)机制

    运行时(Runtime)机制 本文将会以笔者个人的小小研究为例总结一下关于iOS开发中运行时的使用和常用方法的介绍,关于跟多运行时相关技术请查看笔者之前写的运行时高级用法及相关语法或者查看响应官方文档 ...

  7. 快速入门系列--MVC--02路由

    现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯.通过ASP.NET的路由系统,可以完成请求URL与物理文件的分离,其优点是:灵活性.可读性.SEO优化.接下来 ...

  8. iReport 中使用 Chart 图

    iReport 中使用 Chart 图 SSH2项目中需要引入如下两个jar包: jfreechart-1.0.12.jar jcommon-1.0.15.jar 从 iReport 的安装目录下搜索 ...

  9. Sql Server 的本地时间和UTC时间

    一,本地时间和UTC时间 本地时间 世界的每个地区都有自己的本地时间,整个地球分为二十四时区,每个时区都有自己的本地时间. UTC时间 在国际无线电通信中,为统一而普遍使用一个标准时间,称为通用协调时 ...

  10. js中如果省略分号那么它是如何运行的

    在javascript工作中,我们几乎不会去省略分号:为了不必要的麻烦以及代码的规范,那么如果我们省略:会发生呢?预知详情请听下回分解. 看代码! 片段一: 1 var a 2 = 3 8 4 con ...