效果图
const express = require("express")
const router = express.Router()
const multer = require("multer")
// 配置磁盘引擎
let storage = multer.diskStorage({
destination: function(req, file, cb) {
// 指定文件存放路径
cb(null, "./uploads/images")
},
filename: function(req, file, cb) {
// 指定文件名,先获取扩展,随机生成文件名保存给保存文件的方法
//获取文件扩展名
let exts = file.originalname.split(".")
let ext = exts[exts.length - 1] //为了防止上传图片时,图片的名称中含多个点,从后面取最后一个解决问题
let tmpname = Date.now() + parseInt(Math.random() * 9999) //时间戳+随机数生成文件名
cb(null, `${tmpname}.${ext}`)
}
})
// 使用磁盘引擎的配置调用方法
let upload = multer({ storage: storage })
// 上传文件路由,使用single 方法接收前端 图片的name属性是'logo'的图片,保存到req.file
router.post("/upload", upload.single("logo"), (req, res) => {
// 判断文件是否过大,允许上传的文件类型
let { size, mimetype, path } = req.file
let types = ['jpg', 'jpeg', 'png', 'gif']
let tmpType = mimetype.split("/")[1] //截取到文件类型("mimetype": "image/jpeg"中的jpeg)
if (size > 1024 * 500) {
return res.send({ err: -1, msg: "尺寸过大" })
} else if (types.indexOf(tmpType) == -1) {
return res.send({ err: -2, msg: "媒体类型错误" })
} else {
let savePath = req.file.path // 文件的保存路径(用于存数据库,文件地址用)
//上传完图片,拼接返回前端图片的查看地址(静态托管的url要设置成这个)
let imgUrl = `/public/images/${req.file.filename}`
res.send({ err: 0, msg: "ok", imgUrl })
}
})
module.exports = router