Vue3 ts实现将assets中的图片转为file格式,实现本地图片选择上传功能

Vue3 ts实现将assets中的图片转为file格式,实现本地图片选择上传功能

  • 1、需求描述
  • 2、关键代码
  • 3、img标签src使用变量打包后图片无法展示

1、需求描述

用户可以选项系统固定的几个图标,也可以自定义上传图片。系统固定图标存在 src\assets\images\app 路径中。

在这里插入图片描述

2、关键代码

文件转换关键代码

const moudles: any = import.meta.glob('@/assets/images/app/*') // 获取所有默认图标
// path 格式为 '/src/assets/images/app/*******.png'
const createFileFromImage = async (path: string, name: string) => {moudles[path]().then(async (res: { default: string | URL }) => {// 将文件转为blob格式const response = await fetch(new URL(res.default, import.meta.url))const arrayBuffer = await response.arrayBuffer()const blob = new Blob([arrayBuffer], { type: 'image/png' })// blob格式转化为file格式const file = new File([blob], name, { type: 'image/png' })// 依据实际请求需求,还可转换为formData格式const formData = new FormData()formData.append('file', file)// 你的处理逻辑,我赋值给了a-upload组件的变量coverFileList.value = [{name: randomImgName.value,uid: '-1',originFileObj: file as any}]})
}

给a-upload组件初始化一个随机系统图标关键代码
图片为系统内置的10张图片

在这里插入图片描述

const randomImgName = ref(`default-${getRandomNumber(1, 10)}.png`) // 随机获取一张图片
const randomImgPath = ref(`/src/assets/images/app/${randomImgName.value}`) // 图片地址
createFileFromImage(randomImgPath.value, randomImgName.value) // 调用文件转换方法/*** 获取指定范围随机数* @param min 最小值* @param max 最大值*/
const getRandomNumber = (min: number, max: number) => {return Math.floor(Math.random() * (max - min + 1)) + min
}

3、img标签src使用变量打包后图片无法展示

问题: img标签src使用变量打包后会出现图片无法展示

原因:vite 官方默认的配置,如果资源文件在assets文件夹打包后会把图片名加上 hash值,但是直接通过 :src="imgSrc"方式引入并不会在打包的时候解析,导致开发环境可以正常引入,打包后却不能显示的问题

import.meta.glob():在vue2中支持require导入模块或文件,但是在vue3不支持require,可以使用import.meta.glob方法来支持批量导入文件

html代码块

<img :src="imgUrl[index - 1]" @click="changeDefaultImg(`default-${index}.png`)" />

typescript 代码块

const moudles: any = import.meta.glob('@/assets/images/app/*')
const imgUrl: Ref<string[]> = ref([])
const getAssetsFile = (url: string, index: number) => {moudles[url]().then((res: { default: string }) => {imgUrl.value[index] = res.default})
}

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

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

相关文章

sql注入——时间盲注

在sql注入的第九关中&#xff0c;我们既看不到返回值&#xff0c;也不能通过布尔盲注得到结果&#xff0c;这个时候还有一种方法就是通过页面反应时间来获取信息&#xff0c;就是时间盲注 第九关的代码&#xff0c;可以看到无论是否正确&#xff0c;页面都会返回You are in 可…

4---git命令详解第一部分

一、提交文件方面命令&#xff1a; 1.1第一步&#xff1a;将需要提交的文件放进暂存区&#xff1a; 添加单个文件到暂存区stage&#xff1a; git add 文件名 添加多个文件到暂存区&#xff1a; git add 文件名1 文件名2 ... 将目录下所有文件添加到暂存区&#xff1a; git…

【漏洞复现】用友U8 CRM uploadfile 文件上传致RCE漏洞

0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP&#xff0c;主要聚焦成长型、创新型企业&#xff0c;提供企业级云ERP整体解决方案。 0x02 漏洞概述 用友 U8 CRM客户关系管理系统 uploadfle.php 文件存在任意文件上传漏洞&#xff0c;未经身份验证的攻击者通过漏洞上传…

SpringBoot 国际化

如下四步 1 建资源文件 2 在yml文件中指定资源文件名称 3 自定义类型转换&#xff0c;转换locale Configuration public class DefaultLocaleResolver implements LocaleResolver {Overridepublic Locale resolveLocale(HttpServletRequest request) {String locrequest.getP…

基于语音识别的智能电子病历(三)之 M*Modal

讨论“基于语音识别的智能电子病历”&#xff0c;就绕不开 Nuance 和 M*Modal。这2个公司长时间的占据第一和第二的位置。下面介绍一下M*Modal。 这是2019年的一个新闻“专业医疗软件提供商3M公司为自己购买了一份圣诞礼物&#xff0c;即M*Modal IP LLC的医疗技术业务&#xf…

SQL靶场搭建

概述 简单介绍一下SQL靶场的搭建&#xff0c;以及在搭建过程中遇到的一些问题。使用该软件搭建靶场相对简单&#xff0c;适合新手小白。当然&#xff0c;也可以在自己的虚拟机下进行搭建&#xff0c;相对来说就较为复杂。本章主要讲解使用Phpstudy进行SQL靶场搭建。 这里我推…

嵌入式学习——3——TCP-UDP 数据交互,握手,挥手

1、更新源 cd /etc/apt/ sudo cp sources.list sources.list.save 将原镜像备份 sudo vim sources.list 将原镜像修改成阿里源/清华源&#xff0c;如所述 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main …

每周题解:牛的旅行

题目描述 牛的旅行 农民John的农场里有很多牧区。有的路径连接一些特定的牧区。一片所有连通的牧区称为一个牧场。但是就目前而言&#xff0c;你能看到至少有两个牧区不连通。 现在&#xff0c;John想在农场里添加一条路径 ( 注意&#xff0c;恰好一条 )。对这条路径有这样的…

RA-RISK ANALYSIS

文章目录 一、期刊简介二、征稿信息三、期刊表现四、投稿须知五、咨询 一、期刊简介 Risk Analysis代表风险分析学会出版&#xff0c;在ISI期刊引文报告中的社会科学、数学方法类别中排名前10位&#xff0c;为风险分析领域的新发展提供了焦点。这本国际同行评审期刊致力于发表…

MultiHop-RAG:多跳查询的基准检索增强生成

【摘要】检索增强生成&#xff08;RAG&#xff09;通过检索相关知识来增强大语言模型&#xff08;LLM&#xff09;&#xff0c;在减轻 LLM 幻觉和提高响应质量方面显示出巨大的潜力&#xff0c;从而促进 LLM 在实践中的广泛采用。然而&#xff0c;我们发现现有的 RAG 系统不足以…

RH850F1KM-S4-100Pin_ R7F7016453AFP MCAL Gpt 配置

1、Gpt组件包含的子配置项 GptDriverConfigurationGptDemEventParameterRefsGptConfigurationOfOptApiServicesGptChannelConfigSet2、GptDriverConfiguration 2.1、GptAlreadyInitDetCheck 该参数启用/禁用Gpt_Init API中的GPT_E_ALREADY_INITIALIZED Det检查。 true:开启Gpt_…

Django5+React18前后端分离开发实战13 使用React创建前端项目

先将nodejs的版本切换到18&#xff1a; 接着&#xff0c;创建项目&#xff1a; npx create-react-app frontend接着&#xff0c;使用webstorm打开这个刚创建的项目&#xff1a; 添加一个npm run start的配置&#xff1a; 通过start启动服务&#xff1a; 浏览器访问&…

机器学习之决策树算法

使用决策树训练红酒数据集 完整代码&#xff1a; import numpy as np import matplotlib.pyplot as plt from matplotlib.colors import ListedColormap from sklearn import tree, datasets from sklearn.model_selection import train_test_split# 准备数据&#xff0c;这里…

【云原生】Kubernetes 核心概念

什么是 Kubernetes Kubernetes&#xff0c;从官方网站上可以看到&#xff0c;它是一个工业级的容器编排平台。Kubernetes 这个单词是希腊语&#xff0c;它的中文翻译是“舵手”或者“飞行员”。在一些常见的资料中也会看到“ks”这个词&#xff0c;也就是“k8s”&#xff0c;它…

AWS容器之Amazon ECS

Amazon Elastic Container Service&#xff08;Amazon ECS&#xff09;是亚马逊提供的一种完全托管的容器编排服务&#xff0c;用于在云中运行、扩展和管理Docker容器化的应用程序。可以理解为Docker在云中对应的服务就是ECS。

ImageMagick入门教程(免费图片格式转换)

起因是因为我不会图片转换,且发现很多图片转换都要钱,尤其是pdf转jpg,于是我就是找到了这个包,自己处理.当然包时不会导的,所以只能用它提供的命令了. 准备工作 下载imagemagick:ImageMagick – Download 我下载的这个,傻瓜式安装就行,把所有勾勾都勾上,然后要记住安装路径,然…

一文读懂RDMA: Remote Direct Memory Access(远程直接内存访问)

目录 ​编辑 引言 一、RDMA的基本原理 二、RDMA的主要特点 三、RDMA的编程接口 四、RDMA的代码演示 服务器端代码&#xff1a; 客户端代码&#xff1a; 五、总结 引言 RDMA&#xff0c;全称Remote Direct Memory Access&#xff0c;即远程直接内存访问&#xff0c;是…

【ChatGPT】 Microsoft Edge 浏览器扩展使用 GPT

【ChatGPT】添加 Microsoft Edge 浏览器插件免费使用 GPT 文章目录 准备工作添加扩展注意事项 使用 ChatGPT 可以更高效的搜索到想要的内容&#xff0c;有效节约在搜索引擎中排查正确信息的时间。 准备工作 准备一台可上网的电脑电脑上安装有 Windows 自带的 Microsoft Edge …

二.常见算法--贪心算法

&#xff08;1&#xff09;单源点最短路径问题 问题描述&#xff1a; 给定一个图&#xff0c;任取其中一个节点为固定的起点&#xff0c;求从起点到任意节点的最短路径距离。 例如&#xff1a; 思路与关键点&#xff1a; 以下代码中涉及到宏INT_MAX,存在于<limits.h>中…

python+selenium - UI自动框架之封装查找元素

单一的元素定位方法不能满足所有元素的定位&#xff0c;可以根据每个元素的特点来找到合适的方法&#xff0c;可以参考下图的方法&#xff1a; elementFind.py from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_con…