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 学习笔记一些小技巧
Mar 28 Javascript
jQuery 表格工具集
Apr 25 Javascript
jQuery拖拽div实现思路
Feb 19 Javascript
js动态删除div元素基本思路及实现代码
May 08 Javascript
JavaScript中的setMilliseconds()方法使用详解
Jun 11 Javascript
使用Object.defineProperty实现简单的js双向绑定
Apr 15 Javascript
使用jQuery.Qrcode插件在客户端动态生成二维码并添加自定义Logo
Sep 01 Javascript
JS表单验证方法实例小结【电话、身份证号、Email、中文、特殊字符、身份证号等】
Feb 14 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
Jul 12 jQuery
vue 源码解析之虚拟Dom-render
Aug 26 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
Aug 13 Javascript
在antd Table中插入可编辑的单元格实例
Oct 28 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&amp;&amp;mysql)三
2006/10/09 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
深入HTTP响应状态码速查表的详解
2013/06/07 PHP
php常用的url处理函数总结
2014/11/19 PHP
PHP正则验证Email的方法
2015/06/15 PHP
PHP调用接口用post方法传送json数据的实例
2018/05/31 PHP
php 实现简单的登录功能示例【基于thinkPHP框架】
2019/12/02 PHP
用一段js程序来实现动画功能
2007/03/06 Javascript
Jquery Ajax的Get方式时需要注意URL地方
2011/04/07 Javascript
JavaScript制作windows经典扫雷小游戏
2015/03/31 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
js模拟百度模糊搜索的实例
2017/08/04 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
2017/08/10 Javascript
vue element-ui 绑定@keyup事件无效的解决方法
2018/03/09 Javascript
超出JavaScript安全整数限制的数字计算BigInt详解
2018/06/24 Javascript
Angular resolve基础用法详解
2018/10/03 Javascript
vue 对axios get pust put delete封装的实例代码
2020/01/05 Javascript
python九九乘法表的实例
2017/09/26 Python
Python实现自动发送邮件功能
2021/03/02 Python
python正则中最短匹配实现代码
2018/01/16 Python
Python 调用PIL库失败的解决方法
2019/01/08 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
Python 控制终端输出文字的实例
2019/07/12 Python
Python如何通过Flask-Mail发送电子邮件
2020/01/29 Python
基于django2.2连oracle11g解决版本冲突的问题
2020/07/02 Python
python和node.js生成当前时间戳的示例
2020/09/29 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
五分钟学会怎么用Pygame做一个简单的贪吃蛇
2021/01/06 Python
美国美妆网站:B-Glowing
2016/10/12 全球购物
英国打印机墨水和碳粉商店:Printerinks
2017/06/30 全球购物
整顿机关作风心得体会
2014/09/10 职场文书
商务代表岗位职责
2015/02/15 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
总结Java对象被序列化的两种方法
2021/06/30 Java/Android
教你使用VS Code的MySQL扩展管理数据库的方法
2022/01/22 MySQL