node文件上传功能简易实现代码


Posted in Javascript onJune 16, 2017

找了不少文件上传的相关模块,最后选择了比较常用,并且是express推荐使用的 multer 来实现文件上传,附上 GitHub 地址

1. 开始

开始第一步,自然就是安装模块,不多说

npm install multer --save

这里简单说一下,因为文件上传是用 post 方法提交数据,所以上传的单文件或者多文件会作为一个 body 体添加到请求对象中,我们可以通过 req.file 或者 req.files 查看上传后文件的相关信息。

以单文件上传为例,req.file 返回一个对象:

{
   "fieldname":"avatar",  #前端上传文件input的name
   "originalname":"Wx.php",  #本地文件名
   "encoding":"7bit",  #文件编码类型
   "mimetype":"text/php",  #文件类型
   "destination":"uploads/",  #上传根目录
   "filename":"1497286037422Wx.php",  #上传后文件名
   "path":"uploads/1497286037422Wx.php",  #文件路径
   "size":18174  #文件大小
}

该对象的 key 值是固定的,velue 值根据配置生成,用于实现相关逻辑

2. 实现

实现分两部分,前端和后端

前端

前端就是普通的写法,form 表单提交

<form action="/test/upload" method="post" enctype="multipart/form-data">
  <input type="file" name="avatar">
  <input type="submit" name="提交">
</form>

切记,enctype="multipart/form-data" 这个属性一定要加上,否则后台接收不到文件。

后端

首先我们新建配置文件,upload.js

// upload.js

var multer = require('multer');  # 引入模块

var storage = multer.diskStorage({
  destination: function (req, file, cb) {
    cb(null, 'uploads/')
  },
  filename: function (req, file, cb) {
    cb(null, Date.now()+file.originalname)
  }
})

var upload = multer({ storage: storage })

module.exports = upload;

diskStorage方法相当于创建一个磁盘存储引擎,配置文件上传路径,文件名等,可控性更高。

destination  # 设置文件上传路径
filename    # 重命名文件

然后新建路由接收文件,file.js

// file.js 

var express = require('express');
var router = express.Router();

// 引入配置文件
var upload = require('../config/upload');

router.post('/upload', upload.single('avatar'), function(req, res, next) {
  res.send(req.file);
});

module.exports = router;

file.js 中 upload.single() 方法表示接受单文件,常用的有

upload.single(fname);  // 接收单文件
upload.array(fname[, maxCount])  //接收多文件,maxCount表示接收最大数量

fname 是前端 <input type="file" name="fname"> 的 name 值

基本的上传文件方法就这些了,当然还有很多的配置参数之类的设置,要参考 GitHub 说明,地址在开头,需要者自行查阅

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
表单元素事件 (Form Element Events)
Jul 17 Javascript
JavaScript实现弹出子窗口并传值给父窗口
Dec 18 Javascript
深入浅析JavaScript字符串操作方法 slice、substr、substring及其IE兼容性
Dec 16 Javascript
angularjs封装bootstrap时间插件datetimepicker
Jun 20 Javascript
form+iframe解决跨域上传文件的方法
Nov 18 Javascript
jQuery操作复选框(CheckBox)的取值赋值实现代码
Jan 10 Javascript
jQuery表单插件ajaxForm实例详解
Jan 17 Javascript
Node.js和Express简单入门介绍
Mar 24 Javascript
关于jQuery库冲突的完美解决办法
May 20 jQuery
Vue不能检测到Object/Array更新的情况的解决
Jun 26 Javascript
vue+moment实现倒计时效果
Aug 26 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
Aug 15 Javascript
详解webpack 多入口配置
Jun 16 #Javascript
requirejs + vue 项目搭建详解
Jun 16 #Javascript
jQuery 控制文本框自动缩小字体填充
Jun 16 #jQuery
jQuery序列化后的表单值转换成Json
Jun 16 #jQuery
详解探索 vuex 2.0 以及使用 vuejs 2.0 + vuex 2.0 构建记事本应用
Jun 16 #Javascript
基于AngularJS实现的工资计算器实例
Jun 16 #Javascript
Angular+Node生成随机数的方法
Jun 16 #Javascript
You might like
PHP程序员必须清楚的问题汇总
2014/12/18 PHP
PHP解析RSS的方法
2015/03/05 PHP
PHP获取文件扩展名的4种方法
2015/11/24 PHP
初识ThinkPHP控制器
2016/04/07 PHP
js option删除代码集合
2008/11/12 Javascript
一行命令搞定node.js 版本升级
2014/07/20 Javascript
nodejs教程之入门
2014/11/21 NodeJs
JavaScript 学习笔记之语句
2015/01/14 Javascript
微信小程序-详解数据缓存
2016/11/24 Javascript
详解angular2封装material2对话框组件
2017/03/03 Javascript
详解使用Node.js 将txt文件转为Excel文件
2017/07/05 Javascript
vue 2.x 中axios 封装的get 和post方法
2018/02/28 Javascript
快速解决vue动态绑定多个class的官方实例语法无效的问题
2018/09/05 Javascript
vue 表单验证按钮事件交由父组件触发的方法
2018/12/17 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
[01:21:58]守擂赛DOTA2第一周决赛
2020/04/22 DOTA
Python HTMLParser模块解析html获取url实例
2015/04/08 Python
Python正规则表达式学习指南
2016/08/02 Python
浅谈Django自定义模板标签template_tags的用处
2017/12/20 Python
在Python 2.7即将停止支持时,我们为你带来了一份python 3.x迁移指南
2018/01/30 Python
django 通过ajax完成邮箱用户注册、激活账号的方法
2018/04/17 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
使用python画社交网络图实例代码
2019/07/10 Python
Python爬取知乎图片代码实现解析
2019/09/17 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
selenium携带cookies模拟登陆CSDN的实现
2021/01/19 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
欧洲领先的电子和电信零售商和服务提供商:Currys PC World Business
2017/12/05 全球购物
国际象棋商店:The Chess Store
2018/07/09 全球购物
企业安全生产标语
2014/06/06 职场文书
课外小组活动总结
2014/08/27 职场文书
2014年个人总结范文
2015/03/09 职场文书
部门2015年度工作总结
2015/04/29 职场文书
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL