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 相关文章推荐
js 优化次数过多的循环 考虑到性能问题
Mar 05 Javascript
使用原生javascript创建通用表单验证——更锋利的使用dom对象
Sep 13 Javascript
原生js实现半透明遮罩层效果具体代码
Jun 06 Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 Javascript
Node.js中使用jQuery的做法
Aug 17 Javascript
实现一个简单的vue无限加载指令方法
Jan 10 Javascript
Javascript 两种刷新方法以及区别和适用范围
Jan 17 Javascript
jQuery.cookie.js使用方法及相关参数解释
Mar 06 Javascript
jquery实现企业定位式导航效果
Jan 01 jQuery
基于webpack4+vue-cli3项目实现换肤功能
Jul 17 Javascript
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 jQuery
详解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中static静态变量的使用方法详解
2010/06/04 PHP
php中echo()和print()、require()和include()等易混淆函数的区别
2012/02/22 PHP
php 可变函数使用小结
2018/06/12 PHP
js 创建书签小工具之理论
2011/02/25 Javascript
javaScript面向对象继承方法经典实现
2013/08/20 Javascript
js获取通过ajax返回的map型的JSONArray的方法
2014/01/09 Javascript
jQuery实现无限往下滚动效果代码
2016/04/16 Javascript
基于Bootstrap使用jQuery实现简单可编辑表格
2016/05/04 Javascript
Bootstrap CSS组件之按钮组(btn-group)
2016/12/17 Javascript
js省市区级联查询(插件版&amp;无插件版)
2017/03/21 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
js原生方法被覆盖,从新赋值原生的方法
2018/01/02 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
Angular学习教程之RouterLink花式跳转
2018/05/03 Javascript
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
jstree中的checkbox默认选中和隐藏示例代码
2019/12/29 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python 制作糗事百科爬虫实例
2016/09/22 Python
python类的方法属性与方法属性的动态绑定代码详解
2017/12/27 Python
Python基于辗转相除法求解最大公约数的方法示例
2018/04/04 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
python K近邻算法的kd树实现
2018/09/06 Python
10分钟用python搭建一个超好用的CMDB系统
2019/07/17 Python
python3实现在二叉树中找出和为某一值的所有路径(推荐)
2019/12/26 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
openCV提取图像中的矩形区域
2020/07/21 Python
django和flask哪个值得研究学习
2020/07/31 Python
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
办公室文秘岗位职责
2013/11/15 职场文书
毕业生就业自荐书
2013/12/15 职场文书
校园餐饮创业计划书
2014/01/10 职场文书
竞选班长演讲稿500字
2014/08/22 职场文书
运动会广播稿300字
2015/08/19 职场文书
导游词之凤凰古城
2019/10/22 职场文书