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

 


推荐阅读
  • Spring Boot 中配置全局文件上传路径并实现文件上传功能
    本文介绍如何在 Spring Boot 项目中配置全局文件上传路径,并通过读取配置项实现文件上传功能。通过这种方式,可以更好地管理和维护文件路径。 ... [详细]
  • 在JavaWeb开发中,文件上传是一个常见的需求。无论是通过表单还是其他方式上传文件,都必须使用POST请求。前端部分通常采用HTML表单来实现文件选择和提交功能。后端则利用Apache Commons FileUpload库来处理上传的文件,该库提供了强大的文件解析和存储能力,能够高效地处理各种文件类型。此外,为了提高系统的安全性和稳定性,还需要对上传文件的大小、格式等进行严格的校验和限制。 ... [详细]
  • 使用 ListView 浏览安卓系统中的回收站文件 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • 解决lib-flexible安装过程中遇到的错误问题
    在安装 lib-flexible 时,遇到了 `saveError ENOENT: No such file or directory` 错误,具体表现为无法打开 `E:\Github\SDIO\package.json` 文件。解决此问题的关键在于确保项目根目录下存在 `package.json` 文件,并且在正确的项目路径中执行安装命令。建议先检查项目结构,确认文件是否存在,然后再尝试重新安装依赖。 ... [详细]
  • 设计实战 | 10个Kotlin项目深度解析:首页模块开发详解
    设计实战 | 10个Kotlin项目深度解析:首页模块开发详解 ... [详细]
  • 掌握Android UI设计:利用ZoomControls实现图片缩放功能
    本文介绍了如何在Android应用中通过使用ZoomControls组件来实现图片的缩放功能。ZoomControls提供了一种简单且直观的方式,让用户可以通过点击放大和缩小按钮来调整图片的显示大小。文章详细讲解了ZoomControls的基本用法、布局设置以及与ImageView的结合使用方法,适合初学者快速掌握Android UI设计中的这一重要功能。 ... [详细]
  • 深入解析 Vue 中的 Axios 请求库
    本文深入探讨了 Vue 中的 Axios 请求库,详细解析了其核心功能与使用方法。Axios 是一个基于 Promise 的 HTTP 客户端,支持浏览器和 Node.js 环境。文章首先介绍了 Axios 的基本概念,随后通过具体示例展示了如何在 Vue 项目中集成和使用 Axios 进行数据请求。无论你是初学者还是有经验的开发者,本文都能为你解决 Vue.js 相关问题提供有价值的参考。 ... [详细]
  • 如何在 Node.js 环境中将 CSV 数据转换为标准的 JSON 文件格式? ... [详细]
  • 实验九:使用SharedPreferences存储简单数据
    本实验旨在帮助学生理解和掌握使用SharedPreferences存储和读取简单数据的方法,包括程序参数和用户选项。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 【实例简介】本文详细介绍了如何在PHP中实现微信支付的退款功能,并提供了订单创建类的完整代码及调用示例。在配置过程中,需确保正确设置相关参数,特别是证书路径应根据项目实际情况进行调整。为了保证系统的安全性,存放证书的目录需要设置为可读权限。值得注意的是,普通支付操作无需证书,但在执行退款操作时必须提供证书。此外,本文还对常见的错误处理和调试技巧进行了说明,帮助开发者快速定位和解决问题。 ... [详细]
  • 深入浅出 webpack 系列(二):实现 PostCSS 代码的编译与优化
    在前一篇文章中,我们探讨了如何通过基础配置使 Webpack 完成 ES6 代码的编译。本文将深入讲解如何利用 Webpack 实现 PostCSS 代码的编译与优化,包括配置相关插件和加载器,以提升开发效率和代码质量。我们将详细介绍每个步骤,并提供实用示例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 在GitHub上克隆vue-element-admin项目时遇到依赖安装错误
    在 GitHub 上克隆 vue-element-admin 项目后,使用 `npm install` 安装依赖时遇到了未知的 Git 错误。具体错误信息为 `npm ERR! code 128`,提示命令执行失败。这可能是由于网络问题、Git 配置不正确或某些依赖包的仓库地址无效导致的。建议检查网络连接、更新 Git 版本并确保所有依赖项的 URL 正确无误。 ... [详细]
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社区 版权所有