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

一、 Multer 模块介绍

Multer 是一个 node.js 中间件,用于处理 multipart/form-data 类型的表单数据,它主要用于上传文件。它是写在 busboy 之上非常高效。

注意: Multer 不会处理任何非 multipart/form-data 类型的表单数据。

二、 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 })

3.使用 multer

router.post('/doAdd', upload.single("pic"), function (req, res) {
   
	res.send({
    
		file: req.file,//返回文件名 
		body: req.body 
	}) 
});

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

var express = require('express'); 
var multer = require('multer') 
var sd = require('silly-datetime'); 
var path = require('path'); 
var mkdirp = require('mkdirp'); 
var router = express.Router(); 
//配置 
var storage = multer.diskStorage({
    
	//文件保存路径 注意路径必须存在 
	destination: async (req, file, cb)=> {
    
		// 1、获取当前日期 以及当前的时间戳 
		let day = sd.format(new Date(), 'YYYYMMDD');
		//2、创建图片保存的路径 
		let dir = path.join('public/upload/',day) 
		//3、异步创建目录 
		await mkdirp(dir); 
		cb(null, dir) 
	},
	//修改文件名称 
	filename: function (req, file, cb) {
    
		var fileFormat = (file.originalname).split(".");
		cb(null,Date.now() + "." + fileFormat[fileFormat.length - 1]); 
	} 
})
var upload = multer({
    storage: storage })
router.post('/doAdd', upload.single("pic"), function (req, res) {
   
	res.send({
    
		file: req.file,//返回文件名 
		body: req.body 
	}) 
}); 
module.exports = router;

四、 多文件上传

var cpUpload = upload.fields([{
    name: 'avatar', maxCount: 1 }, {
    name: 'gallery', maxCount: 8 }]) 
app.post('/doAdd', cpUpload, function (req, res, next) {
    })

五、综合案例

在这里插入图片描述
app.js

const express = require("express");
const bodyParser = require('body-parser')
const ejs = require("ejs");
//引入外部模块
const admin = require("./routes/admin")
const index = require("./routes/index")
const api = require("./routes/api")

const app = express()
//配置模板引擎
app.engine("html",ejs.__express)
app.set(
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值