vue+ele plus图片分类上传

本文介绍如何在Vue应用中使用el-upload组件,实现实时监测花园植物不同部位的生长情况,包括图片上传、替换、压缩功能,并通过v-for循环展示。着重介绍了上传前的图片校验和压缩图片至特定大小的处理方法。
摘要由CSDN通过智能技术生成

前言:需要实时监测花园中某一类花朵的各部位生长情况,上传图片并支持替换、压缩
运用v-for循环,使用action自动上传图片,单张操作

效果展示
在这里插入图片描述

以下是主要代码:
template模块

<!-- 遍历imgListObj -->
...
	<!--  各属性解析: action-后端接口地址;headers-请求报文头;data:请求额外携带数据-->
	<!--  on-success额外传参:通过es5的bind,绑定到函数上,就可以实现钩子函数的传参了 --> 
	<el-upload
		class="avatar-uploader"
		action="/test.do"
		:headers="headparams"
		:data="getParams(item.type)"
		:show-file-list="false"
		:before-upload="beforeAvatarUpload"
		:on-success="handleAvatarSuccess.bind(null, { index: index, data: item })"
	>
		<img v-if="item.url" :src="item.url" class="avatar" />
		<el-icon v-else class="avatar-uploader-icon"><Plus /></el-icon>
	</el-upload> 

script模块

...
import * as imageConversion from 'image-conversion'; //压缩插件
...
//分类图片的对象
let imgListObj = reactive<any[]>([
	{
		type: 'roots',
		title: '花根',
		url: '',
	},
	{
		type: 'stems',
		title: '花茎',
		url: '',
	},
	...
]);
 
// 上传前
const beforeAvatarUpload: UploadProps['beforeUpload'] = async (rawFile) => {
	console.log('上传前');
	//一些图片校验
	...

	// 压缩
	// 因为压缩文件是异步的,所以需要返回Promise处理
	return new Promise((resolve, reject) => {
		let isLt2M = rawFile.size / 1024 / 1024 < 2; // 判定图片大小是否小于2MB
		if (isLt2M) {
			resolve(rawFile);
		}
		console.log(rawFile); // 压缩到400KB,这里的400就是要压缩的大小,可自定义
		imageConversion.compressAccurately(rawFile, 400).then((res) => {
			resolve(res);
		});
	});
};
// obj 传来的额外参数
const handleAvatarSuccess: UploadProps['onSuccess'] = (obj, response, uploadFile) => {
	obj.data.url = URL.createObjectURL(uploadFile.raw!); 
};
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值