Express通过multer中间件实现多图片上传功能

3 篇文章 0 订阅
3 篇文章 0 订阅

Multer是一个Node.js中间件,用于处理 multipart/form-data 类型的表单数据,主要用于文件上传,注意:Multer中间件不会处理任何非 multipart/form-data 类型的表单数据。
Multer会自动添加一个body对象及file或files对象到 express框架的request 对象,fifile或fifiles对象包含表单上传的文件信息。通过表单上传文件时需要注意的是表单的提交方式只能是POST。

1、安装multer中间件

npm install multer --save

2、在需要用到的js文件中引入需要用到的中间件

const multer = require("multer"); //是node的中间件, 处理表单数据 主要用于上传文件 
let fs = require('fs');//fs模块:fs模块用于对系统文件及目录进行读写操作。
let path = require('path');//用于处理文件路径的小工具

3、配置Multer并使用

// 指定图片存储位置
let uploadImg = multer({
	storage: multer.diskStorage({
		//设置文件存储位置
		destination: function(req, file, cb) {
			let date = new Date();
			let year = date.getFullYear();
			let month = (date.getMonth() + 1).toString().padStart(2, '0');
			let day = date.getDate();
			let dir = "./upload/Img/" + year + month + day;

			//判断目录是否存在,没有则创建
			if (!fs.existsSync(dir)) {
				fs.mkdirSync(dir, {
					recursive: true
				});
			}
			//dir就是上传文件存放的目录
			cb(null, dir);
		},
		//设置文件名称
		filename: function(req, file, cb) {
			let fileName =Date.now() + path.extname(file.originalname);
			//fileName就是上传文件的文件名
			cb(null, fileName);
		}
	})
});

/** 
 * @url /api/upload/upImg
 * @desc 挂载图片上产中间件 仅上传图片
 * uploadImg.array('file',3),接收以'file'命名的上传文件数组,限制最多上传3个文件

*/
router.post("/upImg",  uploadImg.array('file',3), (req,res) => {
	console.log(req.files)
	//req.files[0].path为上传文件数组中第一个文件的地址
	url = "http://localhost:3001" + req.files[0].path
	
	//将图片地址返回前端
	res.json({ok: true,url: url})
})

前台上传部分源码片段

这里用到elementUI中的up-load组件,具体根据自己需要修改

	<el-upload
      class="avatarUploader"
      action="/api/upload/upImg"
      :show-file-list="false"
      :on-success="handleAvatarSuccess"
      :before-upload="beforeAvatarUpload"
    >
      <img v-if="imageUrl" :src="imageUrl" class="avatar" />
      <i v-else class="el-icon-plus avatar-uploader-icon editor-img-plus"></i>
    </el-upload>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值