Express 结合 multer 上传图片
生活随笔
收集整理的這篇文章主要介紹了
Express 结合 multer 上传图片
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
一、 Multer 模塊介紹
Multer 是一個 node.js 中間件,用于處理 multipart/form-data 類型的表單數(shù)據(jù),它主要用 于上傳文件。
它是寫在 busboy 之上非常高效。
注意: Multer 不會處理任何非 multipart/form-data 類型的表單數(shù)據(jù)。
https://www.npmjs.com/package/multer
二、 Express 上傳文件模塊 multer 的使用
第一種使用方式:無法指定上傳文件的后綴名
第二種:可以指定文件的后綴名
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.根據(jù)時間戳生成文件名cb(null, Date.now()+ "." + extname)}}) var upload = multer({ storage: storage }) var router = express.Router() router.get("/",(req, res)=> {res.send("導(dǎo)航列表") }) router.get("/add",(req, res)=> {res.render("admin/nav/add.html") }) router.post("/doAdd", upload.single("pic") ,(req, res)=> {// 獲取表單傳過來的數(shù)據(jù)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("修改導(dǎo)航") })router.post("/doEdit",(req, res)=> {res.send("執(zhí)行修改導(dǎo)航") })module.exports = router
tool.js :
nav.js:
const express = require("express") const tool = require("../../model/tool")var router = express.Router() router.get("/",(req, res)=> {res.send("導(dǎo)航列表") }) router.get("/add",(req, res)=> {res.render("admin/nav/add.html") }) router.post("/doAdd", tool.multer().single("pic") ,(req, res)=> {// 獲取表單傳過來的數(shù)據(jù)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.根據(jù)時間戳生成文件名 // cb(null, Date.now()+ "." + extname) // } // }) // var upload = multer({ storage: storage })// router.post("/doAdd", upload.single("pic") ,(req, res)=> { // // 獲取表單傳過來的數(shù)據(jù) // 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("修改導(dǎo)航") })router.post("/doEdit",(req, res)=> {res.send("執(zhí)行修改導(dǎo)航") })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.獲取當(dāng)前日期 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.根據(jù)時間戳生成文件名cb(null, Date.now() + "." + extname)}})var upload = multer({ storage: storage })return upload} }module.exports = toolsnav.js:
const express = require("express") const tool = require("../../model/tool")var router = express.Router() router.get("/",(req, res)=> {res.send("導(dǎo)航列表") }) router.get("/add",(req, res)=> {res.render("admin/nav/add.html") }) router.post("/doAdd", tool.multer().single("pic") ,(req, res)=> {// 獲取表單傳過來的數(shù)據(jù)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.根據(jù)時間戳生成文件名 // cb(null, Date.now()+ "." + extname) // } // }) // var upload = multer({ storage: storage })// router.post("/doAdd", upload.single("pic") ,(req, res)=> { // // 獲取表單傳過來的數(shù)據(jù) // 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("修改導(dǎo)航") })router.post("/doEdit",(req, res)=> {res.send("執(zhí)行修改導(dǎo)航") })module.exports = router四、實現(xiàn)多文件上傳
add.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("執(zhí)行修改用戶") })router.get("/edit",(req, res)=> {res.send("修改用戶") })module.exports = routertool.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.獲取當(dāng)前日期 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.根據(jù)時間戳生成文件名cb(null, Date.now() + "." + extname)}})var upload = multer({ storage: storage })return upload} }module.exports = tools 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的Express 结合 multer 上传图片的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: art-template模板引擎详解
- 下一篇: IPv6数据报详解