设为首页 收藏本站
查看: 997|回复: 0

[经验分享] 使用nodejs+express(4.x+)实现文件上传

[复制链接]

尚未签到

发表于 2017-2-23 07:52:48 | 显示全部楼层 |阅读模式
  最简单的做法是通过“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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-345853-1-1.html 上篇帖子: 利用nodejs实现登录并转码视频(原创) 下篇帖子: 理解互联网域名请求实现过程,以及Nodejs的http请求小谈
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表