热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

利用Node.js和Express(4.x及以上版本)构建高效文件上传功能

本文介绍了如何使用Node.js和Express(4.x及以上版本)构建高效的文件上传功能。通过引入`multer`中间件,可以轻松实现文件上传。首先,需要通过`npminstallmulter`安装该中间件。接着,在Express应用中配置`multer`,以处理多部分表单数据。本文详细讲解了`multer`的基本用法和高级配置,帮助开发者快速搭建稳定可靠的文件上传服务。

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

 


推荐阅读
author-avatar
Sek_5123_533_477
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有