vue封装文件上传组件

场景:为了安全起见,文件上传需要转为base64格式进行上传。
实现这样的效果。
如图
如图

1、封装uploadFile.vue组件

<template><div class="upload-BOX"><el-uploadclass="avatar-uploader"action="#"ref="upload":show-file-list="false":http-request="httpRequestImg":on-change="changeData":on-success="handleSuccess"style="width: 200px; display: inline-block"><imgv-if="addlistPic":src="'data:image/jpg;base64,' + Base64File"class="avatar":style="{ width: imgWidth , height: imgHeight }"/><i v-else class="el-icon-plus avatar-uploader-icon"></i></el-upload><p v-show="showTip">建议图片大小{{ mywidth }}*{{ myheight }},文件大小不超过{{ mysize }}kb </p></div>
</template><script>import mixin from "../../api/uploadFile/uploadFile";
export default {mixins: [mixin],name: "infoCard",props: {imgWidth:{type: String,default: '80px',},imgHeight:{type: String,default: '80px',},mywidth: {type: String,default: '200',},myheight: {type: String,default: '200',},mysize:{type: String,default: '200',},showTip: {type: Boolean,default: false,},listPic: {type: String,default: "",},},data() {return {addlistPic: this.listPic,Base64File: "",};},watch: {listPic: {handler(newVal, oldVal) {this.addlistPic = newVal;if (this.addlistPic) {this.getFileFn();}},deep: true,immediate: true,},},mounted() {},methods: {getFileFn() {var json = {id: this.listPic,};this.getFile(json).then((res) => {this.Base64File = res.file;});},changeData(file) {},handleSuccess(data) {},// 覆盖默认的上传行为,可以自定义上传的实现httpRequestImg(data) {const isJPG = data.file.type === "image/jpeg";const isPNG = data.file.type === "image/png";const isLt2M = data.file.size / 1024 / 1024 < 10;if (!isJPG && !isPNG) {this.$message.error("上传logo图片只能是 JPG 格式或者 PNG 格式!");return;}if (!isLt2M) {this.$message.error("上传logo图片大小不能超过 10MB!");return;}// 转base64this.getBase64(data.file).then((resBase64) => {this.Base64File = resBase64.split(",")[1];// this.addlistPic = this.Base64File;let json = {file: this.Base64File,fileName: data.file.name,fileExt: data.file.type,};this.uploadImg(json).then((res) => {this.$message.success("上传成功");this.addlistPic = res.body.id;   //后端返回一个图片id作为标识,表单提交时传参this.$emit("uploadSuccess", res.body.id);});});},// 转base64编码getBase64(file) {this.dialogVisible = false;return new Promise((resolve, reject) => {let reader = new FileReader();let fileResult = "";reader.readAsDataURL(file); //开始转reader.onload = function () {fileResult = reader.result;};//转失败reader.onerror = function (error) {reject(error);};//转结束 resolve 出去reader.onloadend = function () {resolve(fileResult);};});},},
};
</script><style scoped lang="scss">
/deep/ .el-upload--text {width: 80px;height: 80px;line-height: 80px;font-size: 24px;
}
.avatar {width: 80px;height: 80px;/* display: block; */
}
</style>

2、组件调用

html代码

<upload-file:listPic="formData.cornerImg"@uploadSuccess="getUploadData4":showTip="false":mywidth="'200'":myheight="'200'":mysize="'200'":imgWidth="'60px'":imgHeight="'60px'"
></upload-file>

js代码

import uploadFile from "../../components/uploadFile/uploadFile.vue";
components: {uploadFile,},
//data中定义的数据
formData: {cornerImg: "",
}//methods方法
getUploadData4(data) {this.formData.cornerImg = data;
},	

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/298430.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金蝶云星空权限项表结构

文章目录 金蝶云星空权限项表结构BOS平台【权限项】MSSQL脚本使用场景优点减少手工一个个创建的人工成本&#xff0c;还容易出错保留内码&#xff0c;可以在代码层级使用&#xff0c;方便 金蝶云星空权限项表结构 BOS平台【权限项】 MSSQL脚本 --权限项主表 SELECT * FROM db…

Python 数据分析 Matplotlib篇 plt.rcParams 字典(第5讲)

Python 数据分析 Matplotlib篇 plt.rcParams字典(第5讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

静态HTTP的常见问题和解决方法

大家好&#xff0c;欢迎来到今天的“静态HTTP大讲堂”&#xff01;今天我们要聊聊静态HTTP的常见问题和解决方法。别小看这些问题哦&#xff0c;它们就像是那些顽皮的小妖精&#xff0c;时不时地给你的网站搞点恶作剧。不过别担心&#xff0c;有我在&#xff0c;这些小妖精都得…

OpenAI科学家Hyung Won Chung演讲精华版

文章目录 第一个观点&#xff1a;涌现第二个观点&#xff1a;如何扩大规模1、标记化2、嵌入3、计算4、评估&#xff08;损失函数&#xff09;5、反向传播 最近从Google跳槽到OpenAI的AI科学家 Hyung Won Chung 比较拗口&#xff0c;我就简称尚哥了 他最近做了一个技术演讲 …

MSFVENOM的使用

#江南的江 #每日鸡汤&#xff1a;泪水和汗水的化学成分相似&#xff0c;但前者只能为你换来同情&#xff0c;后则却可以为你赢得成功。 #初心和目标&#xff1a;争取拿到7ools 的账号。 MSFVENOM Msfvenom是一个自定义的载荷系统&#xff0c;他是基于msf框架下的附属软件&am…

C#中如何稳定精确地每隔5ms执行某个函数?

C#中如何稳定精确地每隔5ms执行某个函数&#xff1f; 在开始前我有一些资料&#xff0c;是我根据自己从业十年经验&#xff0c;熬夜搞了几个通宵&#xff0c;精心整理了一份「C#的资料从专业入门到高级教程工具包」&#xff0c;点个关注&#xff0c;全部无偿共享给大家&#xf…

SATA和M.2接口的异同点

SATA和M.2接口是连接存储设备的两种常见接口&#xff0c;它们在物理尺寸、传输速度、线缆和接头以及适用设备类型等方面有着显著的异同点。 物理尺寸 SATA接口通常用于2.5英寸硬盘、3.5英寸硬盘等传统机械硬盘以及SSD&#xff0c;而M.2接口则是一种较为新型的接口标准&#xff…

数据结构:KMP算法

1.何为KMP算法 KMP算法是由Knuth、Morris和Pratt三位学者发明的&#xff0c;所以取了三位学者名字的首字母&#xff0c;叫作KMP算法。 2.KMP的用处 KMP主要用于字符串匹配的问题&#xff0c;主要思想是当出现字符串不匹配时&#xff0c;我们可以知道一部分之前已经匹配过的的文…

【并发编程篇】读锁readLock()和写锁writeLock()

文章目录 &#x1f6f8;情景引入⭐解决问题 readLock()和writeLock()都是ReadWriteLock接口中定义的方法&#xff0c;用于获取读锁和写锁。 readLock()方法返回一个读锁&#xff0c;允许多个线程同时获取该锁&#xff0c;以进行并发读取操作。如果当前已有一个写锁或其他线程正…

【强化学习】PPO:近端策略优化算法

近端策略优化算法 《Proximal Policy Optimization Algorithms》 论文地址&#xff1a;https://arxiv.org/pdf/1707.06347.pdf 一、 置信域方法(Trust Region Methods) ​ 设 π θ o l d \pi_{\theta_{old}} πθold​​是先前参数为 θ o l d \theta_{old} θold​的策略网…

运筹视角下,体系化学习机器学习算法原理的实践和总结

文章目录 引言目标设计目标实践文章汇总经验总结一则预告 引言 上两周总结了我在体系化学习运筹学基础知识方面的个人经验&#xff0c;看过那篇文章的人可能知道&#xff0c;今年我还花了很多时间学习机器学习中各种模型的算法原理。 在工业应用中&#xff0c;机器学习和运筹…

毫米波RIS研究测试方案:一站式助力工程师探索高频通信未来

方案介绍 在当前科技高速发展的时代&#xff0c;毫米波通信技术因其高数据传输速率和大容量的潜力而备受瞩目。其中&#xff0c;可重构智能表面&#xff08;RIS&#xff09;作为一项创新技术&#xff0c;正在为毫米波通信系统的设计和优化带来新的可能性。为了应对这一领域的研…