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 OOP类与继承
Nov 15 Javascript
Javascript Math ceil()、floor()、round()三个函数的区别
Mar 09 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
Jul 14 Javascript
完美实现仿QQ空间评论回复特效
May 06 Javascript
JavaScript中string对象
Jun 12 Javascript
理解javascript中DOM事件
Dec 25 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
Jan 26 Javascript
多种jQuery绑定事件的实现方式
Jun 13 Javascript
ajax分页效果(bootstrap模态框)
Jan 23 Javascript
JavaScript中创建对象的7种模式详解
Feb 21 Javascript
微信小程序-API接口安全详解
Jul 16 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
Nov 07 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生成带有雪花背景的验证码
2006/10/09 PHP
PHP中使用addslashes函数转义的安全性原理分析
2014/11/03 PHP
PHP中preg_match正则匹配中的/u、/i、/s含义
2015/04/17 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
[原创]ThinkPHP中SHOW_RUN_TIME不能正常显示运行时间的解决方法
2015/10/10 PHP
PHP 中提示undefined index如何解决(多种方法)
2016/03/16 PHP
简单解决微信文章图片防盗链问题
2016/12/17 PHP
PHP封装函数实现生成随机的字符串验证码
2017/01/24 PHP
PHP基于Redis消息队列实现发布微博的方法
2017/05/03 PHP
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
formStorage 基于jquery的一个插件(存储表单中元素的状态到本地)
2012/01/20 Javascript
treepanel动态加载数据实现代码
2012/12/15 Javascript
js内存泄露的几种情况详细探讨
2013/05/31 Javascript
SinaEditor使用方法详解
2013/12/28 Javascript
浏览器窗口加载和大小改变事件示例
2014/02/27 Javascript
js分页工具实例
2015/01/28 Javascript
jQuery实现漂亮实用的商品图片tips提示框效果(无图片箭头+阴影)
2016/04/16 Javascript
JavaScript禁止用户多次提交的两种方法
2016/07/24 Javascript
微信小程序 出现47001 data format error原因解决办法
2017/03/10 Javascript
Angular中自定义Debounce Click指令防止重复点击
2017/07/26 Javascript
深入理解ES6学习笔记之块级作用域绑定
2017/08/19 Javascript
微信小程序云开发实现数据添加、查询和分页
2019/05/17 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
Atom的python插件和常用插件说明
2018/07/08 Python
Python 程序报错崩溃后如何倒回到崩溃的位置(推荐)
2020/06/23 Python
requests在python中发送请求的实例讲解
2021/02/17 Python
使用CSS3中的calc()属性来以算式表达尺寸数值
2016/06/06 HTML / CSS
幼儿园教师备课制度
2014/01/12 职场文书
保护环境倡议书500字
2014/05/19 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
工作说明书格式
2014/07/29 职场文书
2014年保安个人工作总结
2014/11/13 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
分析Netty直接内存原理及应用
2021/06/14 Java/Android
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript