当前位置: 首页 > news >正文

el-upload 上传图片转成base64 字符串,传给后端,且base64在页面的展示

1.dragUpdate 文件上传组件

​
<template><el-uploadref="uploadRef"action="#"v-bind="$attrs"drag:accept="accept":auto-upload="false":show-file-list='isNotLogo':on-change="handleUploadChange":on-remove="handleUploadRemove":on-exceed="onExceed":class="[isNotLogo ? 'drag-upload': 'logo-upload']"><div v-if='isNotLogo' class="el-upload__text"><d2-icon-svg :name="icon" /><h6>点击或将文件拖拽到这里上传</h6><p v-if="illustrate ">{{ illustrate }}</p></div><div><h6>点击或将文件拖拽到这里上传</h6><p>{{`支持扩展名:${accept}`}}</p></div></el-upload>
</template><script>
export default {name: 'DragUpdate',props: {accept: {type: String,default: ''},// 文件大小限制,单位为MfileSize: {type: Number,default: 20},value: {type: [Array, Object],default: null},icon: {type: String,default: 'drag-upload'},isNotLogo: {type: Boolean,default: true}},data() {return {file: null,fileName: ''}},computed: {illustrate() {const { accept, fileSize, $attrs } = thisconst info = [`支持扩展名:${accept}`,`单个文件最大支持${fileSize}Mb`]if ($attrs.limit) info.push(`最多可选${$attrs.limit}个文件`)return info.join(',')}},methods: {handleFileValidate(file, fileList) {const accept = this.accept.split(',')const size = this.fileSize * 1024 * 1024const name = file.nameconst format = name.substring(name.lastIndexOf('.'), name.length)if (!accept.some((val) => val === format)) {this.$message.error(`不支持 ${format} 格式的文件`)this.$refs.uploadRef.handleRemove(file)return false}if (file.size > size) {this.$message.error(`文件大小不能超过${this.fileSize}Mb`)this.$refs.uploadRef.handleRemove(file)return false}if (fileList.filter(item => item.name === file.name).length > 1) {this.$message.error(`"${file.name}"文件名重复'`)this.$refs.uploadRef.handleRemove(file)return false}return true},handleUploadChange(file, fileList) {if (!this.handleFileValidate(file, fileList)) returnthis.setValue(fileList)},handleUploadRemove(file, fileList) {this.setValue(fileList)},onExceed(files, fileList) {// 文件个数超出限制const { limit } = this.$attrsconst len = files.lengthconst olen = fileList.lengthif (limit && len + olen > limit) {const msg = `当前已选择${olen}个文件,还可选择${limit - olen}个文件`this.$message.error(olen ? msg : `最多可选${limit}个文件`)}},setValue(fileList) {fileList.forEach(item => {item.isUpload = true})const { limit } = this.$refs.uploadRefthis.file = [...fileList]if (limit === 1) this.file = fileList.length ? fileList[0] : nullthis.fileName = fileList.map(item => item.name).join(',')this.$emit('input', this.file)this.$emit('change', { file: this.file, fileName: this.fileName })}}
}
</script><style lang="scss" scoped>
.drag-upload {max-width: 600px;::v-deep {.el-upload-dragger {width: 600px;height: 192px;border-color: rgba(0,0,0,0.15);border-radius: 8px;&:hover {border-color: var(--theme-color, #409EFF);}svg {margin-top: 50px;font-size: 40px;}h6 {margin: 14px 0 4px;font-size: 16px;font-weight: 400;color: #262626;line-height: 24px;}p {font-size: 14px;color: #8C8C8C;line-height: 22px;padding: 0 10px;}}.el-upload-list__item {&:first-child {margin-top: 0;}&-name {color: #595959;}}}
}
.theme-tech {.drag-upload {::v-deep {.el-upload-dragger {border-color: rgba(0, 225, 228, 0.4);background-color: rgba(59, 139, 255, 0.1);&:hover {border-color: rgba(0, 225, 228, 1);}h6 {color: #fff;}p {color: #BFD9FF;}svg {color: #fff;}}.el-upload-list__item {&-name {color: #00AEFF;}}}}
}.logo-upload {::v-deep{.el-upload-dragger {width: auto;height: auto;padding: 0px 10px;}}
}
</style>​

2.使用

<dragUpdate v-model="file" :key='num'   :disabled="logoUrl !== ''|| imageUrl !== ''" accept=".jpg,.jpeg,.png,.gif" :isNotLogo='false' :file-size="50" :limit="1" @change="fileChange"></dragUpdate><div class='logo-info' v-if='imageUrl'><el-image :src="imageUrl" class='logo-img'></el-image><div class='logo-delete' @click='delLogo'><d2-icon-svg name="cancel" /></div></div>fileChange(fileInfo) {this.file = fileInfolet that = this;let file = fileInfo.file.raw;// this.imageUrl = URL.createObjectURL(file);var reader = new FileReader();reader.readAsDataURL(file);reader.onloadend = function(){// 将文件(file)转换成base64字符串that.imageUrl = reader.result;}},

 

3.base64 数据的展示

解释:el-image组件能直接展示base64的图片,不需要在做其他的处理

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 氧气传感器在汽车制氧检测中的应用
  • 文件包含漏洞及利用
  • java项目数据库 mysql 迁移到 达梦
  • docker相关内容学习
  • 人力资源的智能匹配:Kompas.ai如何革新招聘流程
  • 微信小程序实现聊天界面,发送功能
  • 在 Qt 中获取 MouseMove 事件
  • mysql中where与on区别
  • python 爬虫技术 第04节 函数和模块
  • 与大数据相关的 Python 第三方库和工具
  • MATLAB基础:数据和变量
  • 基于TensorFlow.js和COCO-SsD模型的实时目标检测网络应用程序
  • Python从0到100(四十六):实现管理员登录及测试功能
  • Vue--解决error:0308010C:digital envelope routines::unsupported
  • CTF ssti零基础(一) 模块注入的payload
  • [nginx文档翻译系列] 控制nginx
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • 「译」Node.js Streams 基础
  • avalon2.2的VM生成过程
  • CentOS从零开始部署Nodejs项目
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Java 23种设计模式 之单例模式 7种实现方式
  • JavaScript异步流程控制的前世今生
  • Java小白进阶笔记(3)-初级面向对象
  • Laravel核心解读--Facades
  • Meteor的表单提交:Form
  • Mithril.js 入门介绍
  • Mysql数据库的条件查询语句
  • oschina
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Sass 快速入门教程
  • 从0实现一个tiny react(三)生命周期
  • 基于 Babel 的 npm 包最小化设置
  • 记录一下第一次使用npm
  • 离散点最小(凸)包围边界查找
  • 聊聊directory traversal attack
  • 容器化应用: 在阿里云搭建多节点 Openshift 集群
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • ​字​节​一​面​
  • ######## golang各章节终篇索引 ########
  • #HarmonyOS:基础语法
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (待修改)PyG安装步骤
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (黑马C++)L06 重载与继承
  • (力扣)1314.矩阵区域和
  • (力扣题库)跳跃游戏II(c++)
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (四)软件性能测试
  • (学习日记)2024.03.25:UCOSIII第二十二节:系统启动流程详解
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)EOS中账户、钱包和密钥的关系
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • .a文件和.so文件