一、 Multer 模块介绍

Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用 于上传文件。
它是写在 busboy 之上非常高效。
注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。
https://www.npmjs.com/package/multer

二、 Express 上传文件模块 multer 的使用

  1. 安装 multer npm install --save multer
  2. 引入配置 multer 模块 :
var multer = require('multer') //配置
var storage = multer.diskStorage({ //文件保存路径 注意路径必须存在destination: function (req, file, cb) { cb(null, 'public/upload/') },//修改文件名称 filename: function (req, file, cb) { var fileFormat = (file.originalname).split("."); cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]); } })
var upload = multer({ storage: storage
})
  1. 使用 multer
router.post('/doAdd', upload.single("pic"), function (req, res) { res.send({ file: req.file,//返回文件名 body: req.body }) });

第一种使用方式:无法指定上传文件的后缀名

第二种:可以指定文件的后缀名

const express = require("express")
var multer  = require('multer')
const path = require('path')
// var upload = multer({ dest: 'static/upload' })
// 上传文件之前目录必须存在
var storage = multer.diskStorage({// 配置上传的文件保存的目录destination: function (req, file, cb) {cb(null, 'static/upload')},// 修改上传的文件的文件名filename: function (req, file, cb) {// 1.获取后缀名let extname = path.extname(file.originalname)// 2.根据时间戳生成文件名cb(null, Date.now()+ "." + extname)}})
var upload = multer({ storage: storage })
var router = express.Router()
router.get("/",(req, res)=> {res.send("导航列表")
})
router.get("/add",(req, res)=> {res.render("admin/nav/add.html")
})
router.post("/doAdd", upload.single("pic") ,(req, res)=> {// 获取表单传过来的数据var body = req.body;console.log(body)console.log(req.file)res.send({body: req.body,file: req.file})
})router.get("/edit",(req, res)=> {res.send("修改导航")
})router.post("/doEdit",(req, res)=> {res.send("执行修改导航")
})module.exports = router


tool.js :

var multer = require('multer')
const path = require('path')let tools = {multer() {// var upload = multer({ dest: 'static/upload' }) // 上传文件之前目录必须存在var storage = multer.diskStorage({// 配置上传的文件保存的目录destination: function (req, file, cb) {cb(null, 'static/upload')},// 修改上传的文件的文件名filename: function (req, file, cb) {// 1.获取后缀名let extname = path.extname(file.originalname)// 2.根据时间戳生成文件名cb(null, Date.now() + "." + extname)}})var upload = multer({ storage: storage })return upload}
}module.exports = tools

nav.js:

const express = require("express")
const tool = require("../../model/tool")var router = express.Router()
router.get("/",(req, res)=> {res.send("导航列表")
})
router.get("/add",(req, res)=> {res.render("admin/nav/add.html")
})
router.post("/doAdd", tool.multer().single("pic") ,(req, res)=> {// 获取表单传过来的数据var body = req.body;console.log(body)console.log(req.file)res.send({body: req.body,file: req.file})
})
// var multer  = require('multer')
// const path = require('path')
// // var upload = multer({ dest: 'static/upload' })
// // 上传文件之前目录必须存在
// var storage = multer.diskStorage({//     // 配置上传的文件保存的目录
//     destination: function (req, file, cb) {//       cb(null, 'static/upload')
//     },
//     // 修改上传的文件的文件名
//     filename: function (req, file, cb) {//         // 1.获取后缀名
//         let extname = path.extname(file.originalname)//         // 2.根据时间戳生成文件名
//       cb(null, Date.now()+ "." + extname)
//     }
//   })
// var upload = multer({ storage: storage })// router.post("/doAdd", upload.single("pic") ,(req, res)=> {//     // 获取表单传过来的数据
//     var body = req.body;
//     console.log(body)
//     console.log(req.file)
//     res.send({//         body: req.body,
//         file: req.file
//     })
// })router.get("/edit",(req, res)=> {res.send("修改导航")
})router.post("/doEdit",(req, res)=> {res.send("执行修改导航")
})module.exports = router

三、 Express 按照日期生成上传文件目录


tool.js:

var multer = require('multer')
const path = require('path')
const sd = require('silly-datetime')
const mkdirp = require('mkdirp')let tools = {multer() {// var upload = multer({ dest: 'static/upload' }) // 上传文件之前目录必须存在var storage = multer.diskStorage({// 配置上传的文件保存的目录destination: async function (req, file, cb) {// 1.获取当前日期 20210417let day = sd.format(new Date(), 'YYYYMMDD')let dir = path.join('static/upload', day)// 2.按照日期生成图片存储目录await mkdirp(dir) // mkdirp()是一个异步方法cb(null, dir)},// 修改上传的文件的文件名filename: function (req, file, cb) {// 1.获取后缀名let extname = path.extname(file.originalname)// 2.根据时间戳生成文件名cb(null, Date.now() + "." + extname)}})var upload = multer({ storage: storage })return upload}
}module.exports = tools

nav.js:

const express = require("express")
const tool = require("../../model/tool")var router = express.Router()
router.get("/",(req, res)=> {res.send("导航列表")
})
router.get("/add",(req, res)=> {res.render("admin/nav/add.html")
})
router.post("/doAdd", tool.multer().single("pic") ,(req, res)=> {// 获取表单传过来的数据var body = req.body;console.log(body)console.log(req.file)res.send({body: req.body,file: req.file})
})
// var multer  = require('multer')
// const path = require('path')
// // var upload = multer({ dest: 'static/upload' })
// // 上传文件之前目录必须存在
// var storage = multer.diskStorage({//     // 配置上传的文件保存的目录
//     destination: function (req, file, cb) {//       cb(null, 'static/upload')
//     },
//     // 修改上传的文件的文件名
//     filename: function (req, file, cb) {//         // 1.获取后缀名
//         let extname = path.extname(file.originalname)//         // 2.根据时间戳生成文件名
//       cb(null, Date.now()+ "." + extname)
//     }
//   })
// var upload = multer({ storage: storage })// router.post("/doAdd", upload.single("pic") ,(req, res)=> {//     // 获取表单传过来的数据
//     var body = req.body;
//     console.log(body)
//     console.log(req.file)
//     res.send({//         body: req.body,
//         file: req.file
//     })
// })router.get("/edit",(req, res)=> {res.send("修改导航")
})router.post("/doEdit",(req, res)=> {res.send("执行修改导航")
})module.exports = router

四、实现多文件上传



add.html:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>
</head>
<body><form action="/admin/user/doAdd" method="POST" enctype="multipart/form-data">标题:<input type="text" name="title" id="title"><br><br>图片1:<input type="file" name="pic1" id="pic1"><br><br>图片2:<input type="file" name="pic2" id="pic2"><br><br>描述:<textarea name="desc" id="desc" cols="30" rows="10"></textarea><br><br><input type="submit" value="提交"></form></body>
</html>

user.js :

const express = require("express")
const tool = require('../../model/tool')var router = express.Router()router.get("/",(req, res)=> {res.send("用户列表")
})router.get("/add",(req, res)=> {res.render("admin/user/add.html")
})let cpUpload = tool.multer().fields([{ name: 'pic1', maxCount: 1 }, { name: 'pic2', maxCount: 1 }])router.post("/doAdd", cpUpload, (req, res)=> {res.send({body: req.body,files: req.files})
})router.post("/doEdit",(req, res)=> {res.send("执行修改用户")
})router.get("/edit",(req, res)=> {res.send("修改用户")
})module.exports = router

tool.js:

var multer = require('multer')
const path = require('path')
const sd = require('silly-datetime')
const mkdirp = require('mkdirp')let tools = {multer() {// var upload = multer({ dest: 'static/upload' }) // 上传文件之前目录必须存在var storage = multer.diskStorage({// 配置上传的文件保存的目录destination: async function (req, file, cb) {// 1.获取当前日期 20210417let day = sd.format(new Date(), 'YYYYMMDD')let dir = path.join('static/upload', day)// 2.按照日期生成图片存储目录await mkdirp(dir) // mkdirp()是一个异步方法cb(null, dir)},// 修改上传的文件的文件名filename: function (req, file, cb) {// 1.获取后缀名let extname = path.extname(file.originalname)// 2.根据时间戳生成文件名cb(null, Date.now() + "." + extname)}})var upload = multer({ storage: storage })return upload}
}module.exports = tools

Express 结合 multer 上传图片相关推荐

  1. 19.Express结合multer上传图片

    1.安装 cnpm install multer --save 2.单文件上传 moudel/tools.js const path= require("path"); const ...

  2. Express框架入门(三)结合 multer 上传图片

    Express框架入门(三)结合 multer 上传图片 一. Multer 模块介绍 二. Express 上传文件模块 multer 的使用 1. 安装 multer 2. 引入配置 multer ...

  3. 吐槽express 中间件multer

    工作不是那么忙,想学一下Express+multer弄一个最简单的文件上传,然后开始npm install,然后开始对着multer官方文档一顿操作. 前台页面最简单的: <!DOCTYPE h ...

  4. express之multer文件上传

    安装 npm install multer --save 为了方便演示,本文内容涉及express的模板引擎art-template 使用 index.html模板,注意一定要写enctype=&qu ...

  5. express中间件multer的使用

    multer 文件上传 1.安装 npm install --save-dev multer 2.引入multer模块 const express = require('express') //引入m ...

  6. multer上传图片

    安装 npm install --save multer 作用 Multer 会添加一个 body 对象 以及 file 或 files 对象 到 express 的 request 对象中. bod ...

  7. vue.js+socket.io+express+mongodb打造在线聊天[一]

    vue.js+socket.io+express+mongodb打造在线聊天 在线地址观看 http://www.chenleiming.com/vuechat github地址 https://gi ...

  8. express,multer,jQuery前端后端上传单个文件

    文章目录 先安装基本的模块 附上multer的github当中别人汉化的API文档 开始创建基本express(上传图片) 测试是否正常 前端部分 前端需要注意的 multer使用 multer({} ...

  9. node使用express+multer文件上传和下载的问题

    简单使用multer实现文件的上传和下载: 1.文件上传使用multer,首先要在项目中安装multer模块. npm install multer -save 2.这里使用express模块,mul ...

最新文章

  1. 提交响应后无法调用sendredirect_微服务的那些事(三),微服务的远程调用方式。RPC和HTTP...
  2. linux 单用户模式 救援模式 忘记root密码的两种解决办法
  3. CCF 2019年题目题解 - Python
  4. 二叉树的基本特性和二叉树的几种基本操作的机制_关于二叉树,你该了解这些!...
  5. Java中SQL语句传向数据库
  6. 2013着重发展的4个方向
  7. [self Introduce]热情洋溢的白羊座
  8. 机器学习系列(19)_通用机器学习流程与问题解决架构模板
  9. 超好用json转excel工具
  10. Win10不能禁和不建议禁的服务以及禁用后的影响
  11. java list 取第一个,从Java LinkedList获取第一个和最后一个元素
  12. USB PD快充协议
  13. Android ANR的trace文件基本信息解读
  14. 牛客IOI周赛20-普及组
  15. [todo] 如何高效工作
  16. 每日三思:微信小程序多层级父子组件如何在子组件滚动加载
  17. Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 15
  18. 区块链时代的大数据生态
  19. 福昕近20年的打怪升级史
  20. Linux服务器下配置tomcat宕机重启

热门文章

  1. Diango博客--23.单元测试:测试 blog 应用
  2. git 拉取远程其他分支代码_【记录】git 拉取远程分支代码,同步到另一个git上...
  3. 机器学习之拉格朗日乘子法和 KKT
  4. 泰安第一中学2021年高考成绩查询,等级考第一天结束 泰安部分考生已完成2021年高考...
  5. python 数字转化excel行列_Python实现excel的列名称转数字、26进制(A-Z)与10进制互相转换...
  6. Exception in thread main java.lang.UnsupportedClassVersionError的另类解决办法
  7. 转 C++宏定义详解
  8. C++中相对路径与绝对路径以及斜杠与反斜杠的区别 及 处理代码
  9. Linux中samba的权限详解,活用三种权限 理解Samba的权限控制
  10. RabbitMQ 示例-生产者-消费者-direct-topic-fanout