a-upload組件實現文件的上傳——.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt

實現下面的上傳/下載/刪除功能:要求支持:【.pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt】
在這里插入圖片描述
分析上面的效果圖,分為【上傳】按鈕和【文件列表】功能:

解決步驟1:上傳按鈕

直接上代碼:

 <a-uploadmultiple:showUploadList="false":before-upload="beforeUpload":customRequest="customRequest":remove="handleRemove"accept=".pdf,.ppt,.pptx,.doc,.docx,.xls,.xlsx,.txt"
><a-button type="primary"><a-icon type="upload" /> 點擊上傳</a-button>
</a-upload>

1.multiple:多選,可以實現多個文件同時選中進行上傳
2.showUploadList:上傳后的文件列表要不要展示,由于我需要自定義文件列表,所以這個屬性設置為false
3.before-upload:上傳之前的函數,可以判斷文件的類型限制和文件大小限制,此處只限制文件類型
4.customRequest:自定義上傳函數
5.remove:刪除文件的函數——此處無意義
6.accept:上傳的文件格式限制

下面寫一下before-uploadcustomRequest方法:

 beforeUpload(file) {const isValidType = ['application/pdf','application/vnd.ms-powerpoint','application/vnd.openxmlformats-officedocument.presentationml.presentation','application/msword','application/vnd.openxmlformats-officedocument.wordprocessingml.document','application/vnd.ms-excel','application/vnd.openxmlformats-officedocument.spreadsheetml.sheet','text/plain',].includes(file.type);if (!isValidType) {this.$message.error('只支持 PDF、PPT、Word、Excel 和 TXT 格式的文件');}return isValidType;
},
async customRequest(data) {const formData = new FormData();formData.append('file', data.file);const resData = await uploadFile(formData).then((res) => {return res;});console.log(5555, resData);if (resData) {this.fileList.push({uid: encodeURI(this.ossUrl + resData),name: resData.data.split(/[/\\]/).pop(),status: 'done',url: encodeURI(this.ossUrl + resData),checked:false,});this.$forceUpdate();}
},

解決步驟2:文件列表功能

<div v-if="fileList.length"><div class="btnCls"><a-space><a-checkbox v-model="allChecked" @change="onAllCheckChange">全選</a-checkbox><a href="javascript:;" style="color:#67C23A" @click="batchDownLoad">批量下載</a><a href="javascript:;" style="color:red;" @click="batchDelete">批量刪除</a></a-space></div><div v-for="item in fileList" :key="item.uid" style="margin-top:5px;"><a-checkbox v-model="item.checked" @change="onCheckChange($event,item)"></a-checkbox><a href="javascript:;" style="margin:0 10px;">{{item.name}}</a><a-space><a href="javascript:;" style="color:#67C23A" @click="downloadFile(item.url,item.name)">下載</a><a href="javascript:;" style="color:red;" @click="handleDelete(item)">刪除</a></a-space></div>
</div>

對應的代碼如下:

data(){return{allChecked:false,fileList:[],}
},
methods:{onAllCheckChange(e){this.allChecked = e.target.checked;this.fileList.forEach(item=>{item.checked = e.target.checked;})this.$forceUpdate();},onCheckChange(e,item){item.checked = e.target.checked;this.$forceUpdate();let arr = this.fileList.filter(file=>file.checked);if(arr.length==0){this.allChecked = false;}else if(arr.length==this.fileList.length){this.allChecked = true;}},handleDelete(item){//刪除文件let index = this.fileList.findIndex(file=>file.url==item.url);if(index>-1){this.fileList.splice(index,1);}if(this.fileList.length==0){this.allChecked = false;}},batchDelete(){let arr = this.fileList.filter(item=>item.checked);if(arr.length==0){this.$message.info('請選擇要刪除的文件');return;}arr.forEach(item=>{this.handleDelete(item);})},batchDownLoad(){let arr = this.fileList.filter(item=>item.checked);if(arr.length==0){this.$message.info('請選擇要下載的文件');return;}arr.forEach(item=>{this.downloadFile(item.url,item.name);})},//下載文件downloadFile(url, fileName) {const downloadRes = async ()=>{try {let response = await fetch(url);let blob = await response.blob();let objectURL = window.URL.createObjectURL(blob);let a = document.createElement('a');a.href = objectURL;a.download = fileName;a.click();a.remove();window.URL.revokeObjectURL(objectURL);}catch (e) {var element = document.createElement('a');element.setAttribute('href', url);element.setAttribute('download', fileName);document.body.appendChild(element);element.click();document.body.removeChild(element);}}downloadRes();},
}

完成!!! 多多積累,多多收獲!!!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/81079.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/81079.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/81079.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

.NET Core 數據庫ORM框架用法簡述

.NET Core ORM框架用法簡述 一、主流.NET Core ORM框架概述 在.NET Core生態系統中&#xff0c;主流的ORM(Object-Relational Mapping)框架包括&#xff1a; ??Entity Framework Core (EF Core)?? - 微軟官方推出的ORM框架??Dapper?? - 輕量級微ORM??Npgsql.Entit…

halcon打開圖形窗口

1、dev_open_window 參數如下&#xff1a; 1&#xff09;Row(輸入參數) y方向上&#xff0c;圖形窗口距離左上角頂端的像素個數 2&#xff09;Column(輸入參數) x方向上&#xff0c;距離左上角左邊的像素個數 3&#xff09;Width(輸入參數) 圖形窗口寬度 4&#xff09;He…

2025東三省D題深圳杯D題數學建模挑戰賽數模思路代碼文章教學

完整內容請看文章最下面的推廣群 一、問題一&#xff1a;混合STR圖譜中貢獻者人數判定 問題解析 給定混合STR圖譜&#xff0c;識別其中的真實貢獻者人數是后續基因型分離與個體識別的前提。圖譜中每個位點最多應出現2n個峰&#xff08;n為人數&#xff09;&#xff0c;但由…

iView Table 組件跨頁選擇功能實現文檔

iView Table 組件跨頁選擇功能實現文檔 功能概述 實現基于 iView Table 組件的多選功能&#xff0c;支持以下特性&#xff1a; ? 跨頁數據持久化選擇? 當前頁全選/取消全選? 自動同步選中狀態顯示? 分頁切換狀態保持? 高性能大數據量支持 實現方案 技術棧 iView UI 4…

家庭服務器IPV6搭建無限郵箱系統指南

qq郵箱操作 // 郵箱配置信息 // 注意&#xff1a;使用QQ郵箱需要先開啟IMAP服務并獲取授權碼 // 設置方法&#xff1a;登錄QQ郵箱 -> 設置 -> 賬戶 -> 開啟IMAP/SMTP服務 -> 生成授權碼 服務器操作 fetchmail 同步QQ郵箱 nginx搭建web顯示本地同步過來的郵箱 ssh…

Tauri v1 與 v2 配置對比

本文檔對比 Tauri v1 和 v2 版本的配置結構和內容差異&#xff0c;幫助開發者了解版本變更并進行遷移。 配置結構變化 v1 配置結構 {"package": { ... },"tauri": { "allowlist": { ... },"bundle": { ... },"security":…

對js的Date二次封裝,繼承了原Date的所有方法,增加了自己擴展的方法,可以實現任意時間往前往后推算多少小時、多少天、多少周、多少月;

封裝js時間工具 概述 該方法繼承了 js 中 Date的所有方法&#xff1b;同時擴展了一部分自用方法&#xff1a; 1、任意時間 往前推多少小時&#xff0c;天&#xff0c;月&#xff0c;周&#xff1b;參數1、2必填&#xff0c;參數3可選beforeDate(num,formatter,dateVal); befo…

TimeDistill:通過跨架構蒸餾的MLP高效長期時間序列預測

原文地址&#xff1a;https://arxiv.org/abs/2502.15016 發表會議&#xff1a;暫定&#xff08;但是Star很高&#xff09; 代碼地址&#xff1a;無 作者&#xff1a;Juntong Ni &#xff08;倪浚桐&#xff09;, Zewen Liu &#xff08;劉澤文&#xff09;, Shiyu Wang&…

DeepSeek最新大模型發布-DeepSeek-Prover-V2-671B

2025 年 4 月 30 日&#xff0c;DeepSeek 開源了新模型 DeepSeek-Prover-V2-671B&#xff0c;該模型聚焦數學定理證明任務&#xff0c;基于混合專家架構&#xff0c;使用 Lean 4 框架進行形式化推理訓練&#xff0c;參數規模達 6710 億&#xff0c;結合強化學習與大規模合成數據…

如何用AI生成假期旅行照?

以下是2025年最新AI生成假期旅行照片的實用工具推薦及使用指南&#xff0c;結合工具特點、研發背景和適用場景進行綜合解析&#xff1a; 一、主流AI旅行照片生成工具推薦與對比 1. 搜狐簡單AI&#xff08;國內工具&#xff09; ? 特點&#xff1a; ? 一鍵優化與背景替換&…

ElaticSearch

ElaticSearch: 全文搜索 超級強&#xff0c;比如模糊查詢、關鍵詞高亮等 海量數據 高效查詢&#xff0c;比傳統關系數據庫快得多&#xff08;尤其是搜索&#xff09; 靈活的數據結構&#xff08;Schema靈活&#xff0c;可以動態字段&#xff09; 分布式高可用&#xff0c;天…

Android開發,實現一個簡約又好看的登錄頁

文章目錄 1. 編寫布局文件2.設計要點說明3. 效果圖4. 關于作者其它項目視頻教程介紹 1. 編寫布局文件 編寫activity.login.xml 布局文件 <?xml version"1.0" encoding"utf-8"?> <androidx.appcompat.widget.LinearLayoutCompat xmlns:android…

機器學習:【拋擲硬幣的貝葉斯后驗概率】

首先,拋硬幣的問題通常涉及先驗概率、似然函數和后驗概率。假設用戶可能想通過觀察一系列的正面(H)和反面(T)來更新硬幣的偏差概率。例如,先驗可能假設硬幣是均勻的,但隨著觀察到更多數據,用貝葉斯定理計算后驗分布。 通常,硬幣的偏差可以用Beta分布作為先驗,因為它…

Echarts 問題:自定義的 legend 點擊后消失,格式化 legend 的隱藏文本樣式

文章目錄 問題分析實現步驟代碼解釋問題 如下圖所示,在自定義的 legend 點擊后會消失 分析 我把隱藏的圖例字體顏色設為灰色,可以借助 legend.formatter 和 legend.textStyle 結合 option.series 的 show 屬性來達成。以下是具體的實現步驟和示例代碼: <!DOCTYPE ht…

光譜相機如何提升目標檢測與識別精度

光譜相機&#xff08;多光譜/高光譜&#xff09;通過捕捉目標在多個波段的光譜特征&#xff0c;能夠揭示傳統RGB相機無法感知的材質、化學成分及物理特性差異。以下是提升其目標檢測與識別精度的核心方法&#xff1a; ?1. 硬件優化&#xff1a;提升數據質量? ?(1) 光譜分辨…

springboot項目配置nacos,指定使用環境

遇到這樣一個問題&#xff0c;在開發、測試、生成環境之間切換的問題。 大多數的操作是通過修改spring.profiles.active來確定指向使用的環境配置文件&#xff0c;對應項目中需要增加對應的配置文件。 但是現在幾乎所有公司都會有代碼管理不管是SVN、git&#xff0c;這樣就會涉…

AI代碼審查的落地實施方案 - Java架構師面試實戰

AI代碼審查的落地實施方案 - Java架構師面試實戰 本文通過模擬一位擁有十年Java研發經驗的資深架構師馬架構與面試官之間的對話&#xff0c;深入探討了AI代碼審查的落地實施方案。 第一輪提問 面試官&#xff1a; 馬架構&#xff0c;請介紹一下您對AI代碼審查的理解。 馬架…

TDengine 訂閱不到數據問題排查

簡介 TDengine 在實際生產應用中&#xff0c;經常會遇到訂閱程序訂閱不到數據的問題&#xff0c;總結大部分都為使用不當或狀態不正確等問題&#xff0c;需手工解決。 查看服務端狀態 通過 sql 命令查看有問題的 topic 和consumer_group 組訂閱是否正常。 select * from inf…

二、UI自動化測試02--元素定位方法

目錄 一、定位?組元素?法二、XPath 定位?法1. 路徑策略1.1 路徑值獲取?法 2. 利?元素屬性策略利?元素屬性策略的注意事項 3. 屬性和邏輯結合4. 層級和屬性結合策略5. XPath 延伸?法 三、CSS 定位?法1. CSS 策略: id選擇器/class選擇器/元素選擇器/屬性選擇器2. 屬性選擇…