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 相关文章推荐
JavaScript 入门·JavaScript 具有全范围的运算符
Oct 01 Javascript
javascript网页关键字高亮代码
Jul 30 Javascript
页面中body onload 和 window.onload 冲突的问题的解决
Jul 01 Javascript
jQuery 选择器理解
Mar 16 Javascript
Jquery.TreeView结合ASP.Net和数据库生成菜单导航条
Aug 27 Javascript
返回上一页并自动刷新的JavaScript代码
Feb 19 Javascript
原生js制作简单的数字键盘
Apr 24 Javascript
Zabbix添加Node.js监控的方法
Oct 20 Javascript
jquery判断页面网址是否有效的两种方法
Dec 11 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
Jan 08 Javascript
详解ES6 Symbol 的用途
Oct 14 Javascript
使用webpack和rollup打包组件库的方法
Feb 25 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 目录与文件处理-郑阿奇(续)
2011/07/04 PHP
详解PHP匿名函数与注意事项
2016/03/29 PHP
基于Jquery的温度计动画效果
2010/06/18 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
ASP.NET jQuery 实例10 动态修改hyperlink的URL值
2012/02/03 Javascript
JQuery的$命名冲突详细解析
2013/12/28 Javascript
浅谈jquery事件处理
2015/04/24 Javascript
javascript实现点击后变换按钮显示文字的方法
2015/05/13 Javascript
详解AngularJS中module模块的导入导出
2015/12/10 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
如何写好你的JavaScript【推荐】
2017/03/02 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
vue-router 源码之实现一个简单的 vue-router
2018/07/02 Javascript
在NPM发布自己造的轮子的方法步骤
2019/03/09 Javascript
用Python中的wxPython实现最基本的浏览器功能
2015/04/14 Python
Python安装第三方库及常见问题处理方法汇总
2016/09/13 Python
手把手教你用python抢票回家过年(代码简单)
2018/01/21 Python
对python捕获ctrl+c手工中断程序的两种方法详解
2018/12/26 Python
python Web flask 视图内容和模板实现代码
2019/08/23 Python
Python closure闭包解释及其注意点详解
2019/08/28 Python
Python实现CNN的多通道输入实例
2020/01/17 Python
基于Pytorch SSD模型分析
2020/02/18 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
非常震撼的纯CSS3人物行走动画
2016/02/24 HTML / CSS
纯CSS3单页切换导航菜单界面设计的简单实现
2016/08/16 HTML / CSS
老海军美国官网:Old Navy
2016/09/05 全球购物
Ootori在线按摩椅店:一家专业的按摩椅制造商
2019/04/10 全球购物
旅游管理专业学生求职信
2013/09/28 职场文书
职称自我鉴定
2013/10/15 职场文书
毕业学生推荐信
2013/12/01 职场文书
一名老师的自我评价
2014/02/07 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
酒店开业庆典主持词
2014/03/21 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript