控制元件將具有
1. 上傳佇列的列表,顯示檔名稱,大小等資訊,可以顯示上傳進度實時重新整理
2. 取消上傳
使用Element的uploader控制元件,上傳檔案的行為和樣式不用自己全部實現,使程式碼簡化。且有足夠的擴充套件性,檔案傳輸請求的程式碼可以基於axios完全自己重寫。我們只用關心核心程式碼。
搭建專案框架
首先建立一個空白的專案,引入Element控制元件庫,具體的操作和使用Element控制元件庫請看官方文件:
後端專案框架的搭建,請閱讀:[.Net 6]寫一個簡單的檔案上傳控制元件後端 - 林曉lx - 部落格園 (cnblogs.com)
編寫檔案上傳程式碼
編寫檔案上傳的幫助類,新建ajaxRequire.ts並鍵入以下內容:
onUploadProgress回撥函式將在資料傳輸進度變化的時候觸發,攜帶progressEvent 原生獲取上傳進度事件引數,progressEvent.lengthComputable用於判斷是否可以進行進度計算
axios.CancelToken.source()可以獲得一個源,這個源包含一個唯一Id用於標識哪個請求,和一個cancel函式用於取消請求
編寫控制元件
在App.vue中新增核心的控制元件 <el-upload>
接著新增屬性,注意我們將用自己的方法upload替換el-upload中的上傳操作,因此設定action="/",
:http-request="upload",如下:
在script中新增上傳Dto:一些業務相關的資料在這裡定義 比如ownerUserId, fileContainerName等,這些資料可以通過表單與檔案資料一併上傳
method中新增一些幫助類函式:
編寫提交前置函式,這裡將做驗證和生成cancelToken:
編寫upload函式,用於組裝請求資料並交給 ajaxRequire 執行上傳任務
將token將作為取消傳輸的入口交給ajaxRequire ,自己也保留這個物件用於傳送取消命令,相當於“一式兩份”。
新增el-upload各階段函式的訂閱
:before-upload="beforeUpload"
:on-success="handleSuccess"
:on-remove="handleRemove"
:on-error="handleError"
編寫上傳佇列的Html程式碼:
執行
進入後端專案的目錄(api),執行:
前端專案目錄(web),執行
執行效果:
完整程式碼:
專案地址: