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

选择图片转base64格式组件简单封装-Base64ImageInpu

选择图片转base64格式组件简单封装-Base64ImageInpu

vue+ts中使用。
在这里插入图片描述

<!-- Base64ImageInput-base64格式的图片上传输入框,这里并不会真的将图片上传,只是将图片转为base64格式显示在输入框中并且让其可以预览 -->
<template><div><a-input class="w-full"v-bind="$attrs"v-on="$listeners"@click="onClick"v-model="state.inputVal"readOnly><a-tooltip slot="suffix"v-if="base64Img"><div slot="title"><img :src="base64Img"class="w-14 h-14 my-4"v-if="base64Img!=''"></div><a-icon type="info-circle"style="color: rgba(0,0,0,.45)" /></a-tooltip></a-input><input type="file"hidden="hidden"ref="uploadButton":accept="acceptString"@change="uploadImage()"></div>
</template><script lang="ts">
import {Component, Emit, Model, Watch, Prop, Vue
} from 'vue-property-decorator';@Component({name: 'GBase64ImageInput',components: {},
})
export default class GBase64ImageInput extends Vue{@Model("change", {default: () => ([]),}) value!: any;/*** 文件类型(可以是字符串或者数组)* 示例:*   accept="image/png"*   accept="image/*"*   accept="image/png,image/jpeg"*   :accept="['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg']"*/@Prop({ type: [String, Array], default: () => ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp', 'svg'] })accept!: string | string[];get acceptString() {if (Array.isArray(this.accept)) {// 如果传的是 ['png','jpg'] 就转成 "image/png,image/jpeg"return this.accept.map((ext) => {if (ext.startsWith('image/')) return ext;return `image/${ext}`;}).join(',');}return this.accept;}base64Img = '';state = {inputVal: '',}onClick() {(this.$refs.uploadButton as any).click();}uploadImage() {const file = (this.$refs.uploadButton as any).files[0];const reader = new FileReader();let rawImg;reader.onloadend = () => {rawImg = reader.result;this.base64Img = rawImg;this.$set(this.state, 'inputVal', rawImg);this.emitChange();};reader.readAsDataURL(file);}@Watch('value')onValueChange(val: any) {this.base64Img = val;this.$set(this.state, 'inputVal', val);}@Emit("change")emitChange() {return this.base64Img;}mounted() {if (_.size(this.value) > 0) {this.base64Img = this.value;this.$set(this.state, 'inputVal', this.value);}}
}
</script><style lang="less" scoped>
</style>

使用:

<template slot="thumbnail"slot-scope="text, record"><GBase64ImageInput v-model="modalState.record.thumbnail" />
</template>
http://www.dtcms.com/a/361617.html

相关文章:

  • nestjs 发起请求 axios
  • Onion-LO(已开源)——LIDAR里程计的统一框架
  • IO进程线程;标准io;文件IO;0901
  • PyTorch 实战(3)—— PyTorch vs. TensorFlow:深度学习框架的王者之争
  • 「日拱一码」075 机器学习——密度泛函理论DFT
  • 在 Unity 中调用腾讯云机器翻译
  • 命名空间级别应用 Pod 安全标准
  • 在 Ubuntu 24.04 LTS 上安装 SSH 并启用服务端实现远程连接
  • 别再刷屏console.log!JavaScript高级调试方法全攻略
  • Product Hunt 每日热榜 | 2025-08-30
  • C++“类吸血鬼幸存者”游戏制作的要点学习
  • IO_HW_9_1
  • 【零碎小知识点 】(二)Java基础与常用API编码实践
  • day2
  • 【STM32】中断软件分支处理( NVIC 和 GIC)
  • curl 介绍及使用教程
  • Kotlin 协程异步任务工具类:高效处理异步操作与超时控制
  • 构建共享新生态的智慧物流开源了
  • ClickHouse常见问题——ClickHouseKeeper配置listen_host后不生效
  • java设计模式一、单例模式
  • 查看LoRA 哪个适配器处于激活状态(67)
  • 【秋招笔试】2025.08.31小红书秋招笔试真题
  • 鸿蒙NEXT开发指南:Image、Video与Swiper组件全面解析
  • Mac idea 格式化代码快捷键
  • 用滑动窗口与线性回归将音频信号转换为“Token”序列:一种简单的音频特征编码方法
  • 若依vue自定义发布环境部署后所有菜单无法点击
  • Kubernetes一网络组件概述
  • 如何正确使用ChatGPT做数学建模比赛——数学建模AI使用技巧
  • Sqlsugar补充自定义模板
  • 环境搭建汇总