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.pswp.cn/diannao/13811.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13811.shtml
英文地址,請注明出處:http://en.pswp.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;未經身份驗證的攻擊者通過漏洞上傳…

Java基礎入門day52

day52 servlet 綜合案例 登錄功能 設置歡迎頁 <?xml version"1.0" encoding"UTF-8"?> <web-app xmlns"http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation&q…

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靶場搭建。 這里我推…

前后端編程語言和運行環境的理解

我已重新檢查了我的回答,并確保信息的準確性。以下是常用的編程語言,以及它們通常用于前端或后端開發,以及相應的框架和運行環境: 前端開發 JavaScript 框架:React, Angular, Vue.js, Ember.js, Backbone.js運行環境:Web 瀏覽器HTML (HyperText Markup Language) 不是編…

嵌入式學習——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 …

Flutter 中的 DrawerController 小部件:全面指南

Flutter 中的 DrawerController 小部件&#xff1a;全面指南 Flutter 是一個流行的跨平臺移動應用開發框架&#xff0c;它提供了豐富的組件和工具來幫助開發者構建高質量的應用。在Flutter中&#xff0c;DrawerController并不是一個內置的組件&#xff0c;但是它的概念可以用于…

每周題解:牛的旅行

題目描述 牛的旅行 農民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 系統不足以…

DNS域名解析服務器搭建

基礎介紹 DNS 從哪里獲取 IP 地址&#xff1f; 本地緩存&#xff1a; DNS服務器會將先前查詢過的域名和對應的IP地址存儲在本地緩存中&#xff0c;以便在后續查詢中加快響應速度。如果之前已經查詢過某個域名&#xff0c;DNS服務器會直接從本地緩存中獲取對應的IP地址。遞歸查…

02. Redis 事務

文章目錄 Redis 事務執行事務放棄事務編譯性異常運行時異常 Redis 事務 Redis 單條明令是原子性的&#xff0c;但Redis事務不保證原子性。 事務的本質就是&#xff1a;一組命令一起執行&#xff01;一個事務中的所有命令都會被序列化&#xff0c;在事務執行過程中&#xff0c;會…

2024-05-19 問AI: 大語言模型的BPE方向是什么意思?

文心一言 大語言模型的上下文中&#xff0c;BPE&#xff08;Byte-Pair Encoding&#xff09;是一種常用的子詞單元&#xff08;subword unit&#xff09;編碼方法&#xff0c;尤其在處理自然語言處理任務時。這種方法的主要目的是解決自然語言中的詞匯表大小問題&#xff0c;特…

mock.js和apifox模擬接口的能力

mock.js 和 Apifox 都是前端開發中常用的工具&#xff0c;用于模擬后端接口和數據。下面是它們的主要特點和模擬接口的能力的比較&#xff1a; mock.js mock.js 是一個用于生成隨機數據的 JavaScript 庫。它允許你定義數據模板&#xff0c;并生成模擬數據。mock.js 主要用于前…

VSCode下STM32開發環境搭建

VSCode下STM32開發環境搭建 需要的軟件 make-3.81 https://udomain.dl.sourceforge.net/project/gnuwin32/make/3.81/make-3.81.exe arm-none-eabi-gcc https://developer.arm.com/open-source/gnu-toolchain/gnu-rm/downloads https://links.jianshu.com/go?tohttps%3A%2F%…

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; 瀏覽器訪問&…