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 相关文章推荐
alixixi runcode.asp的代码不错的应用
Aug 08 Javascript
jQuery 剧场版 你必须知道的javascript
May 27 Javascript
jQuery 常见开发使用技巧总结
Dec 26 Javascript
jquery清空textarea等输入框实现代码
Apr 22 Javascript
javascript操作表格排序实例分析
May 06 Javascript
jQuery实现区域打印功能代码详解
Jun 17 Javascript
jQuery简单实现彩色云标签效果示例
Aug 01 Javascript
JavaScript实现简单的星星评分效果
May 18 Javascript
基于jquery实现多级菜单效果
Jul 25 jQuery
JS实现的3des+base64加密解密算法完整示例
May 18 Javascript
Javascript执行流程细节原理解析
May 14 Javascript
JS+canvas五子棋人机对战实现步骤详解
Jun 04 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
在Linux系统下一键重新安装WordPress的脚本示例
2015/06/30 PHP
PHP实现将多个文件压缩成zip格式并下载到本地的方法示例
2018/05/23 PHP
PHP实现15位身份证号转18位的方法分析
2019/10/16 PHP
PHP实现简单的计算器
2020/08/28 PHP
摘自百度的图片轮换效果代码
2007/11/19 Javascript
js实现兼容IE6与IE7的DIV高度
2010/05/13 Javascript
javascript:;与javascript:void(0)使用介绍
2013/06/05 Javascript
关于js数组去重的问题小结
2014/01/24 Javascript
js继承call()和apply()方法总结
2014/12/08 Javascript
jQuery自定义数值抽奖活动代码
2016/06/11 Javascript
第八篇Bootstrap下拉菜单实例代码
2016/06/21 Javascript
AngularJS实现页面定时刷新
2017/03/14 Javascript
Angular+Node生成随机数的方法
2017/06/16 Javascript
JavaScript实现的贝塞尔曲线算法简单示例
2018/01/30 Javascript
jQuery基于Ajax实现读取XML数据功能示例
2018/05/31 jQuery
Vue常用指令详解分析
2018/08/19 Javascript
vue实现选中效果
2020/10/07 Javascript
Python数据类型学习笔记
2016/01/13 Python
基于python log取对数详解
2018/06/08 Python
django admin 后台实现三级联动的示例代码
2018/06/22 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
tensorflow 变长序列存储实例
2020/01/20 Python
如何基于python把文字图片写入word文档
2020/07/31 Python
适合各种场合的美食礼品:Harry & David
2016/08/03 全球购物
联想澳大利亚官网:Lenovo Australia
2018/01/18 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
Java面试题汇总
2015/12/06 面试题
幼儿教师思想汇报
2014/01/10 职场文书
《这儿真好》教学反思
2014/02/22 职场文书
班级学习雷锋活动总结
2014/07/04 职场文书
优秀团员事迹材料1500字
2014/08/31 职场文书
世界气象日活动总结
2015/02/27 职场文书
自我推荐信格式模板
2015/03/24 职场文书
房贷收入证明范本
2015/06/12 职场文书
2016党校学习心得体会范文
2016/01/07 职场文书
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python