使用nodejs+express(4.x+)实现文件上传
2015-10-09 13:32
856 查看
最简单的做法是通过“connect-multiparty”中间件实现上传。
通过在项目中npm install connect-multiparty进行安装。
用法:
上传后,上传的文件会在临时目录中生成一个临时文件,具体可将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。
完成。
“multiparty”的用法详见:
www.npmjs.com/package/multiparty
github.com/andrewrk/node-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
相关文章推荐
- HtmlParser初探--使用Nodefilter和Visitor进行网页分析
- HTMLParser使用详解(2)- Node内容
- beecloud resrful api test(nodejs)
- leetcode 237--Delete Node in a Linked List
- nodeJS压缩图片/JS/CSS
- NODE接口的属性和方法
- Merge Two Sorted Lists & Remove Nth Node From End of List
- leetcode 19:Remove Nth Node From End of List(15-10-7)
- hadoop namenode切换
- LeetCode---Remove Nth Node From End of List
- nodeJs的事件机制
- 237.Delete Node in a Linked List
- 使用archiver在nodejs下打包
- node.js下when.js(Promises/A)的实践
- nodejs学习笔记---1
- Node.js安装配置
- Failed to connect to /XXXfor block, add to deadNodes and continue. java.net.NoRouteToHostException:
- Browserify - 像Node.js的require()一样组织浏览器端的js代码
- setTimeout,setInterval,process.nextTick,setImmediate in Nodejs
- nodejs中exports与module.exports的实践