nodejs基于express实现文件上传的方法


Posted in NodeJs onMarch 19, 2018

本文实例讲述了nodejs基于express实现文件上传的方法。分享给大家供大家参考,具体如下:

前段时间在做个人项目的时候,用到了nodejs服务端上传文件,现在回头把这个小结一下,作为记录。

本人上传文件时是基于express的multiparty ,当然也可以使用connect-multiparty中间件实现,但官方似乎不推荐使用connect-multiparty中间件。废话不多说,下面看代码吧。

步骤:

(1)使用express创建项目,默认使用的是jade模板引擎,但是还是习惯于html,所以就改为html模板。
(2)在项目目录中,通过npm install multiparty进行安装必要组件。
(3)修改views/index.html,添加一个文件上传的form。

index.html

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>上传文件</title>
</head>
<body>
  上传文件
  <form method='post', action='/file/uploading', enctype='multipart/form-data'>
    <input type="file" name="inputFile">
    <input type="submit" value="上传">
  </form>
</body>
</html>

(4)修改routes/index.js,实现上传页面和上传响应的后台代码。

var express = require('express');
var router = express.Router();
var multiparty = require('multiparty');
var util = require('util');
var fs = require('fs');
/* 上传页面. */
router.get('/', function(req, res, next) {
 //res.render('./views/index');
 res.sendfile('./views/index.html');
});
/* 上传 */
router.post('/file/uploading', function(req, res, next) {
  /* 生成multiparty对象,并配置上传目标路径 */
  var form = new multiparty.Form();
  /* 设置编辑 */
  form.encoding = 'utf-8';
  //设置文件存储路劲
  form.uploadDir = './public/files';
  //设置文件大小限制
  form.maxFilesSize = 2 * 1024 * 1024;
  // form.maxFields = 1000;  //设置所有文件的大小总和
  //上传后处理
  form.parse(req, function(err, fields, files) {
    var filesTemp = JSON.stringify(files, null, 2);
    if(err) {
      console.log('parse error:' + err);
    }else {
      console.log('parse files:' + filesTemp);
      var inputFile = files.inputFile[0];
      var uploadedPath = inputFile.path;
      var dstPath = './public/files' + inputFile.originalFilename;
      //重命名为真实文件名
      fs.rename(uploadedPath, dstPath, function(err) {
        if(err) {
          console.log('rename error:' + err);
        }else {
          console.log('rename ok');
        }
      })
    }
    res.writeHead(200, {'content-type': 'text/plain;charset=utf-8'});
    res.write('received upload:\n\n');
    res.end(util.inspect({fields: fields, files: filesTemp}))
  })
})
module.exports = router;

希望本文所述对大家nodejs程序设计有所帮助。

NodeJs 相关文章推荐
nodejs中简单实现Javascript Promise机制的实例
Dec 06 NodeJs
nodejs加密Crypto的实例代码
Jul 07 NodeJs
详解nodejs模板引擎制作
Jun 14 NodeJs
Nodejs实现多房间简易聊天室功能
Jun 20 NodeJs
nodejs前端自动化构建环境的搭建
Jul 26 NodeJs
nodejs结合Socket.IO实现的即时通讯功能详解
Jan 12 NodeJs
nodejs实现解析xml字符串为对象的方法示例
Mar 14 NodeJs
详解redis在nodejs中的应用
May 02 NodeJs
nodeJS进程管理器pm2的使用
Jan 09 NodeJs
用Electron写个带界面的nodejs爬虫的实现方法
Jan 29 NodeJs
nodejs同步调用获取mysql数据时遇到的大坑
Mar 02 NodeJs
nodejs如何在package.json中设置多条启动命令
Mar 16 NodeJs
nodejs+mongodb aggregate级联查询操作示例
Mar 17 #NodeJs
nodejs实现超简单生成二维码的方法
Mar 17 #NodeJs
NodeJS父进程与子进程资源共享原理与实现方法
Mar 16 #NodeJs
NodeJS实现不可逆加密与密码密文保存的方法
Mar 16 #NodeJs
nodejs简单读写excel内容的方法示例
Mar 16 #NodeJs
nodejs简单访问及操作mysql数据库的方法示例
Mar 15 #NodeJs
nodejs实现的简单web服务器功能示例
Mar 15 #NodeJs
You might like
深入php 正则表达式的学习探讨
2013/06/06 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
PHP addAttribute()函数讲解
2019/02/03 PHP
JS打开新窗口的2种方式
2013/04/18 Javascript
jQuery使用ajaxSubmit()提交表单示例
2014/04/04 Javascript
用jquery写的菜单从左往右滑动出现
2014/04/11 Javascript
jquery 取子节点及当前节点属性值
2014/07/25 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
2016/07/28 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
Vue学习笔记进阶篇之函数化组件解析
2017/07/21 Javascript
Vue+SpringBoot开发V部落博客管理平台
2017/12/27 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
解决vue中虚拟dom,无法实时更新的问题
2018/09/15 Javascript
使用Vue实现调用接口加载页面初始数据
2019/10/28 Javascript
浅谈Vue组件单元测试究竟测试什么
2020/02/05 Javascript
ant design vue中表格指定格式渲染方式
2020/10/28 Javascript
Python中的异常处理简明介绍
2015/04/13 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
Python使用PIL模块生成随机验证码
2017/11/21 Python
浅谈配置OpenCV3 + Python3的简易方法(macOS)
2018/04/02 Python
python读取ini配置文件过程示范
2019/12/23 Python
Python安装OpenCV的示例代码
2020/03/05 Python
python查看矩阵的行列号以及维数方式
2020/05/22 Python
详解Django关于StreamingHttpResponse与FileResponse文件下载的最优方法
2021/01/07 Python
解决virtualenv -p python3 venv报错的问题
2021/02/05 Python
一款简洁的纯css3代码实现的动画导航
2014/10/31 HTML / CSS
SQL Server笔试题
2012/01/10 面试题
创联软件面试题笔试题
2012/10/07 面试题
《夜莺的歌声》教学反思
2016/02/22 职场文书
2016年精神文明建设先进个人事迹材料
2016/02/29 职场文书
2016年“6.26”禁毒宣传月系列活动总结
2016/04/05 职场文书
关于MySQL中explain工具的使用
2023/05/08 MySQL
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL