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 相关文章推荐
网页中可关闭的漂浮窗口实现可自行调节
Aug 20 Javascript
Ext GridPanel加载完数据后进行操作示例代码
Jun 17 Javascript
JS实现双击屏幕滚动效果代码
Oct 28 Javascript
jQuery 中的 DOM 操作
Apr 26 Javascript
js数字计算 误差问题的快速解决方法
Feb 28 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
Mar 09 Javascript
javascript数据结构中栈的应用之符号平衡问题
Apr 11 Javascript
jquery Ajax实现Select动态添加数据
Jun 08 jQuery
angularjs+bootstrap实现自定义分页的实例代码
Jun 19 Javascript
jQuery实现返回顶部按钮和scroll滚动功能[带动画效果]
Jul 05 jQuery
angular8和ngrx8结合使用的步骤介绍
Dec 01 Javascript
原生JS实现留言板功能
Feb 08 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
什么是短波收听SWL
2021/03/01 无线电
浅析php适配器模式(Adapter)
2014/11/25 PHP
PHP微信开发之根据用户回复关键词\位置返回附近信息
2016/06/24 PHP
php经典趣味算法实例代码
2020/01/21 PHP
简单三步,搞掂内存泄漏
2007/03/10 Javascript
Javascript 刷新全集常用代码
2009/11/22 Javascript
缓动函数requestAnimationFrame 更好的实现浏览器经动画
2012/12/07 Javascript
jquery实现滑动图片自己测试的例子
2013/11/05 Javascript
js 立即调用的函数表达式如何写
2014/01/12 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
基于socket.io和node.js搭建即时通信系统
2014/07/30 Javascript
js调出上下文菜单的实例
2015/12/17 Javascript
纯JS实现可拖拽表单的简单实例
2016/09/02 Javascript
Angular4 ElementRef的应用
2018/02/26 Javascript
vue导出html、word和pdf的实现代码
2018/07/31 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
Vue项目报错:Uncaught SyntaxError: Unexpected token
2018/11/10 Javascript
微信小程序如何修改radio和checkbox的默认样式和图标
2019/07/24 Javascript
浅谈JavaScript窗体Window.ShowModalDialog使用
2020/07/22 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
从零学python系列之数据处理编程实例(一)
2014/05/22 Python
Python cookbook(数据结构与算法)根据字段将记录分组操作示例
2018/03/19 Python
Python wxpython模块响应鼠标拖动事件操作示例
2018/08/23 Python
对python 读取线的shp文件实例详解
2018/12/22 Python
python函数装饰器之带参数的函数和带参数的装饰器用法示例
2019/11/06 Python
python实现滑雪游戏
2020/02/22 Python
python爬虫实现POST request payload形式的请求
2020/04/30 Python
Python字典fromkeys()方法使用代码实例
2020/07/20 Python
Jupyter Notebook 远程访问配置详解
2021/01/11 Python
StubHub德国:购买和出售门票
2017/09/06 全球购物
群众路线党课主持词
2014/04/01 职场文书
村庄绿化方案
2014/05/07 职场文书
尊老爱幼演讲稿
2014/09/04 职场文书
银行反四风对照检查材料
2014/09/29 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis
vue route新窗口跳转页面并且携带与接收参数
2022/04/10 Vue.js