热门标签 | 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

 


推荐阅读
  • 本文详细介绍了如何使用 Yii2 的 GridView 组件在列表页面实现数据的直接编辑功能。通过具体的代码示例和步骤,帮助开发者快速掌握这一实用技巧。 ... [详细]
  • 尽管使用TensorFlow和PyTorch等成熟框架可以显著降低实现递归神经网络(RNN)的门槛,但对于初学者来说,理解其底层原理至关重要。本文将引导您使用NumPy从头构建一个用于自然语言处理(NLP)的RNN模型。 ... [详细]
  • 本文将深入探讨如何在不依赖第三方库的情况下,使用 React 处理表单输入和验证。我们将介绍一种高效且灵活的方法,涵盖表单提交、输入验证及错误处理等关键功能。 ... [详细]
  • 在项目部署后,Node.js 进程可能会遇到不可预见的错误并崩溃。为了及时通知开发人员进行问题排查,我们可以利用 nodemailer 插件来发送邮件提醒。本文将详细介绍如何配置和使用 nodemailer 实现这一功能。 ... [详细]
  • 本文介绍了如何使用JavaScript的Fetch API与Express服务器进行交互,涵盖了GET、POST、PUT和DELETE请求的实现,并展示了如何处理JSON响应。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 本文探讨了如何在Node.js环境中,通过Tor网络使用的SOCKS5代理执行HTTP请求。文中不仅提供了基础的实现方法,还介绍了几种常用的库和工具,帮助开发者解决遇到的问题。 ... [详细]
  • Node.js 入门指南(一)
    本文介绍了Node.js的安装步骤、如何创建第一个应用程序、NPM的基本使用以及处理回调函数的方法。通过实际操作示例,帮助初学者快速掌握Node.js的基础知识。 ... [详细]
  • 深入解析JavaScript中的require与import差异
    本文深入探讨了JavaScript中require与import的主要区别,并通过实际案例详细说明了它们的工作原理及应用场景,对于开发者理解和使用这两种模块加载方式具有重要指导意义。 ... [详细]
  • XNA 3.0 游戏编程:从 XML 文件加载数据
    本文介绍如何在 XNA 3.0 游戏项目中从 XML 文件加载数据。我们将探讨如何将 XML 数据序列化为二进制文件,并通过内容管道加载到游戏中。此外,还会涉及自定义类型读取器和写入器的实现。 ... [详细]
  • RecyclerView初步学习(一)
    RecyclerView初步学习(一)ReCyclerView提供了一种插件式的编程模式,除了提供ViewHolder缓存模式,还可以自定义动画,分割符,布局样式,相比于传统的ListVi ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 本文探讨了前端包管理器的核心功能,包括注册机制、文件存储、上传下载、以及依赖分析等关键特性,并介绍了几种流行的前端包管理工具。 ... [详细]
  • 本文详细介绍了如何在Linux系统中安装和配置Node.js,包括从官方下载、编译安装到运行基本示例的全过程。 ... [详细]
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社区 版权所有