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 相关文章推荐
取得一定长度的内容,处理中文
Dec 20 Javascript
JS的get和set使用示例
Feb 20 Javascript
原生js实现日期联动
Jan 12 Javascript
实例讲解jquery中mouseleave和mouseout的区别
Feb 17 Javascript
AngularJs IE Compatibility 兼容老版本IE
Sep 01 Javascript
基于 flexible 的 Vue 组件:Toast -- 显示框效果
Dec 26 Javascript
详解JS数值Number类型
Feb 07 Javascript
详解vue项目打包后通过百度的BAE发布到网上的流程
Mar 05 Javascript
QML实现圆环颜色选择器
Sep 25 Javascript
如何使用Jquery动态生成二级选项列表
Feb 06 jQuery
浅谈vue单页面中有多个echarts图表时的公用代码写法
Jul 19 Javascript
浅析VUE防抖与节流
Nov 24 Vue.js
详解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 缓存函数代码
2008/08/27 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
2010/05/10 PHP
利用PHP实现图片等比例放大和缩小的方法详解
2013/06/06 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
alert和confirm功能介绍
2014/05/21 Javascript
jQuery实现的感应鼠标悬停图片色彩渐显效果
2015/03/03 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
倾力总结40条常见的移动端Web页面问题解决方案
2016/05/24 Javascript
ES6中的Promise代码详解
2017/10/09 Javascript
百度地图去掉marker覆盖物或者去掉maker的label文字方法
2018/01/26 Javascript
Angular @HostBinding()和@HostListener()用法
2018/03/05 Javascript
vue之将echart封装为组件
2018/06/02 Javascript
JointJS流程图的绘制方法
2018/12/03 Javascript
通过实例了解Javascript柯里化流程
2020/03/03 Javascript
js通过canvas生成图片缩略图
2020/10/02 Javascript
[02:32]【DOTA2亚洲邀请赛】iceice,梦开始的地方
2017/03/13 DOTA
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
python实现从web抓取文档的方法
2014/09/26 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
Python实现PS滤镜功能之波浪特效示例
2018/01/26 Python
python自动化测试之如何解析excel文件
2019/06/27 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
Flask教程之重定向与错误处理实例分析
2019/08/01 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
详细分析Python collections工具库
2020/07/16 Python
HTML5的Video标签有部分MP4无法播放的问题解析(多图)
2017/08/18 HTML / CSS
行政助理岗位职责
2013/11/10 职场文书
师德师风承诺书
2014/05/23 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
go web 预防跨站脚本的实现方式
2021/06/11 Golang
python 字典和列表嵌套用法详解
2021/06/29 Python
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle
深入理解pytorch库的dockerfile
2022/06/10 Python
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS