摘要:最近項目中涉及很多文件上傳的地方,然后文件上傳又有很多限制。比如文件大小限制,文件個數限制,文件類型限制,文件上傳后的列表樣式自定義,包括上傳進度條等問題。下面是我對的上傳組件的一些改造,點擊查看源碼。
最近項目中涉及很多文件上傳的地方,然后文件上傳又有很多限制。比如文件大小限制,文件個數限制,文件類型限制,文件上傳后的列表樣式自定義,包括上傳進度條等問題。下面是我對element-ui的上傳組件的一些改造, 點擊查看源碼。
上傳
limit: 限制文件個數
action:文件的上傳地址(這里我沒有特別封裝axios,直接用默認的)
accept:接受上傳的文件類型(字符串)
data:上傳時附帶的額外參數
multiple:多選(布爾類型,我這里設為true,即可以批量上傳)
show-file-list:是否顯示文件上傳列表
with-credentials:是否攜帶cookie,布爾類型,true表示攜帶
1、handleExceed是文件超出個數限制時的鉤子
private handleExceed(files: any, fileList: any) { if (fileList.length > 20) { this.$message.error("最多允許上傳20個文件"); return false; } }
2、handleBeforeUpload文件上傳前的鉤子,可以做一些攔截,return false,則停止上傳
private handleBeforeUpload(file: any) { // 文件大小限制 const isLt5M = file.size / 1024 / 1024 < 5; if (!isLt5M) { this.$message.error("不得超過5M"); return isLt5M; } // 文件類型限制 const name = file.name ? file.name : ""; const ext = name ? name.substr(name.lastIndexOf(".") + 1, name.length) : true; const isExt = this.accept.indexOf(ext) < 0; if (isExt) { this.$message.error("請上傳正確的格式類型"); return !isExt; } // 大小和類型驗證都通過后,給自定義的列表中添加需要的數據 this.objAddItem(this.tempArr, file); }
3、handleProgress文件上傳時的鉤子,更新進度條的值
private handleProgress(event: any, file: any, fileList: any) { this.tempArr.forEach((element: any, index: number) => { if (element.uid === file.uid) { // 更新這個uid下的進度 const progress = Math.floor(event.percent); // 防止上傳完接口還沒有返回成功值,所以此處給定progress的最大值為99,成功的鉤子中再置為100 element.progress = progress === 100 ? 99 : progress; this.$set(this.tempArr, index, element); this.$emit("changeFileList", this.tempArr); } }); }
4、handleSuccess文件上傳成功時的鉤子
private handleSuccess(response: any, file: any, fileList: any) { this.tempArr.forEach((element: any, index: number) => { if (element.uid === file.uid) { element.progress = 100; // element.url為下載地址,一般后端人員會給你返回 // 我這邊為了做后面的下載,先寫死鏈接供測試 element.url = "http://originoo-1.b0.upaiyun.com/freepic/3226433.jpg!freethumb"; this.$message.success("文件上傳成功"); this.$set(this.tempArr, index, element); this.$emit("changeFileList", this.tempArr); } }); // response是后端接口返回的數據,可以根據接口返回的數據做一些操作 // 示例 // const bizCode = response.rspResult.bizCode; // switch (bizCode) { // case 200: // this.tempArr.forEach((element: any, index: number) => { // if (element.uid === file.uid) { // element.progress = 100; // element.url = response.data.url; // 這是后端人員給我返回的下載地址 // this.$message.success("文件上傳成功"); // this.$set(this.tempArr, index, element); // this.$emit("changeFileList", this.tempArr); // } // }); // break; // default: // this.tempArr.forEach((element: any, index: number) => { // if (element.uid === file.uid) { // this.tempArr.splice(index, 1); // 上傳失敗刪除該記錄 // this.$message.error("文件上傳失敗"); // this.$emit("changeFileList", this.tempArr); // } // }); // break; // } }
5、handleError文件上傳失敗時的鉤子
private handleError(err: any, file: any, fileList: any) { this.tempArr.forEach((element: any, index: number) => { if (element.uid === file.uid) { this.tempArr.splice(index, 1); // 上傳失敗刪除該記錄 this.$message.error("文件上傳失敗"); this.$emit("changeFileList", this.tempArr); } }); }
添加數據函數
private objAddItem(tempArr: any[], file: any) { const tempObj = { uid: file.uid, // uid用于辨別文件 originalName: file.name, // 列表顯示的文件名 progress: 0, // 進度條 code: 200, // 上傳狀態 }; tempArr.push(tempObj); this.$emit("changeFileList", tempArr); }
上傳的文件下載封裝
private downloadFileFun(url: any) { const iframe: any = document.createElement("iframe") as HTMLIFrameElement; iframe.style.display = "none"; // 防止影響頁面 iframe.style.height = 0; // 防止影響頁面 iframe.src = url; document.body.appendChild(iframe); // 這一行必須,iframe掛在到dom樹上才會發請求 // 5分鐘之后刪除(onload方法對于下載鏈接不起作用,就先摳腳一下吧) setTimeout(() => { iframe.remove(); }, 5 * 60 * 1000); }
持續更新......
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/99635.html
摘要:在年月份發布了版本,經過重構之后,可以說是一個船心版本在項目都落地之后,就想升級一下版本,嘗一嘗帶來的舒適,也是為后面項目的開展做一個準備。選了之后會詢問是否開啟模式,以及選擇預處理器,這里根據個人情況選用。 vue-cli在2018年8月份發布了3.0版本,經過重構之后,可以說是一個船心版本!在項目都落地之后,就想升級一下cli版本,嘗一嘗3.0帶來的舒適,也是為后面項目的開展做一個...
摘要:更新今天反復試了,不用區分測試環境還是生產環境,統一都用就可以了背景之前自己搭建了一個的后臺項目,坑很多,其中一個就是資源加載的方案,由于是后臺項目,之前一直沒放在心上,看到一些資源優化方案后,覺得有必要弄一下。 20180829 更新 今天反復試了,不用區分 測試環境還是 生產環境,統一都用 cdn 就可以了 背景 之前自己搭建了一個 vue + tp5.1 的后臺項目(https:...
摘要:正文上傳圖片到七牛云這個需要前后端的配合才能實現,這里是官方的參考鏈接。參考鏈接組件的怎么獲取進度值谷歌找到的其一谷歌找到的其二完 前言 最近在做后臺管理項目,采用的 vue-element-admin ,上傳圖片是一個很常用的功能,也遇到了很多問題,剛好趁此機會做一些總結。 初步總結下會提到的問題,目錄如下: el-upload 自定義上傳方法 圖片上傳到七牛云 圖片壓縮后再上傳(...
摘要:無效方案根據交易所小時成交量占比和實時價格加權計算得到渲染結果是一個包含了文字,同時有名為的,并無小圖標,后邊中括號結構里只能有一個有待考證。 Table 固定表頭 只要在el-table元素中定義了height屬性,即可實現固定表頭的表格,而不需要額外的代碼。例如: ... 這里文檔只給了一種固定高度250px的解決方案,實際應用大多數是需要自適應占滿父元素,超出滾動固定表頭的...
閱讀 2311·2021-10-11 10:59
閱讀 2602·2021-10-11 10:58
閱讀 3304·2021-09-08 09:35
閱讀 3783·2021-09-02 15:21
閱讀 1455·2019-08-30 15:53
閱讀 2608·2019-08-29 14:16
閱讀 2068·2019-08-26 14:00
閱讀 2942·2019-08-26 13:52