使用nodejs+express(4.x+)实现文件上传

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

时间: 2024-12-27 14:37:57

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

使用express 4的实现文件上传

使用模块node-multiparty实现文件上传 由于Express 4与Express 3的在中间件的使用上具有很大的不同:许多以前内置在Express 3中的中间件,现在都需要自己通过npm进行下载,操作.今天刚好碰到一个要修改文件上传功能的中间件.所以抛弃了原有的bodyParser中间件,在gitHub上找到了node-multiparty模块,跟着API做了一个小例子,分享给大家. 首先来看客户端代码 <!DOCTYPE html> <html> <head>

nodejs+ajax实现简单的文件上传功能

app.js中引入express的第三方中间件multer实现文件上传功能. var multer = require('multer');//用express的第三方中间件 multer 实现文件上传功能. app.use(multer({//设置文件上传到的位置 dest: './public/images/upload', rename: function (fieldname, filename) { return filename; } })); 路由 app.post('/uploa

nodejs+express整合kindEditor实现图片上传

kindEditor官网上中提供了ASP,ASP.NET,JSP相关的整合应用,http://kindeditor.net/docs/upload.html可以参照实现nodejs的整合,发现实用nodejs更简单 环境: unbuntu 14.10 nodejs 0.10.35 express 4.11.2 formidable 1.0.16 kindEditor 4.1.10 webStorm 8 1.通过IDE或终端创建一个名称为test的工程 2.编辑package.json添加form

express 4.x 文件上传

1.安装文件上传模块: npm install multiparty --save 2.在routes/index.js 中添加: // 引用模块 let multiparty = require("multiparty"); // 定义文件提交url 类型为post router.post('/upload', function (req, res, next) { // 指定文件保存路径 var form = new multiparty.Form({uploadDir: './p

一个简单的blog系统(三) 增加文件上传功能

1. 一个完整的博客怎么能缺少图片呢,目前上传文件的方法有三种: (1)使用Express自带的文件上传功能,不涉及数据库. (2)使用Formidable外部模块,不涉及数据库. (3)上传到MongoDB,涉及到数据库. 可以看出,第一种方式最简单,Express通过bodyParser()解析请求体,因此我们可以使用bodyParser()来实现文件的上传功能. 2.实现过程 2.1 首先打开header.ejs,在<li><a href="/post" tit

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

原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件眼下有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 Formidable 外部模块,不涉及数据库 上传到 MongoDB ,涉及数据库 这里使用第一种,用户将文件上,存储于:blog/public/images/文件夹下. blog/views/header.ejs  在<span><a title="发表" href=&quo

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

原教程 https://github.com/nswbmw/N-blog/wiki/_pages的第三章 上传文件目前有三种方法: 使用 Express 自带的文件上传功能,不涉及数据库 使用 Formidable 外部模块,不涉及数据库 上传到 MongoDB ,涉及数据库 这里使用第一种,用户将文件上,存储于:blog/public/images/目录下. blog/views/header.ejs  在<span><a title="发表" href="

Node.js文件上传

Node.js express使用Multer实现文件上传html部分 <div> <h3>文件上传:</h3> 选择一个文件上传: <br/> <form action="/upload" method="post" enctype="multipart/form-data"> <input type="file" name="content&quo

Nodejs进阶:基于express+multer的文件上传

安装组件 npm install express multer --save 服务端代码server.js var Express = require('express'); var multer = require('multer'); var bodyParser = require('body-parser'); var app = Express(); app.use(bodyParser.json()); // multer 提供了 storage 这个参数来对资源保存的路径.文件名进