AntD框架上傳檔案前校驗資訊:選擇檔案前進行內容校驗並提示
使用場景
使用a-upload提交檔案時,往往會攜帶其他需要手動輸入的資訊,a-upload元件本身雖然提供了上傳前校驗的方法beforeUpload,但該方法是在選擇檔案後才會進行,這是官方文件的描述:
上傳檔案之前的鉤子,引數為上傳的檔案,若返回 false 則停止上傳。支援返回一個 Promise 物件,Promise 物件 reject 時則停止上傳,resolve 時開始上傳( resolve 傳入 File 或 Blob 物件則上傳 resolve 傳入物件)。注意:IE9 不支援該方法。
如果使用者想要在選擇上傳檔案之前校驗(如input輸入框的內容是否符合規則)則該方法無法支援
解決思路
用@change方法監控需要校驗的內容,當內容不通過校驗時上傳按鈕不啟用,通過校驗後點選上傳按鈕才可以上傳檔案
注意事項
onChange方法中不要使用vue的雙向繫結獲取校驗內容,因為onChange觸發時的實際內容為輸入前的值,由此可見這樣都比較不好,所以antd給你提供了e,目的就是想讓你當前輸入用e.target.value來獲取 而不是用getFieldValue獲取當前輸入值。
實現程式碼
頁面部分程式碼
<a-form :form="excelform" autocomplete="off">
<!-- 示例,上傳檔案前要校驗姓名電話必須填寫 -->
<a-form-item :md="8" :sm="24" label="姓名">
<a-input @change="checkUpload($event.target.value, 0)" :v-model="username" name="username" />
</a-form-item>
<a-form-item :md="8" :sm="24" label="電話">
<a-input @change="checkUpload($event.target.value, 1)" :v-model="usertel" maxLength="11" name="usertel" />
</a-form-item>
</a-form>
<!-- 未通過校驗時,按鈕點選功能為校驗和提示,已通過校驗是按鈕功能為上傳,使用同一個標誌位來控制兩個不同功能的按鈕不會一起顯示 -->
<a-button v-show="!isUpload" type="primary" style="margin-bottom:10px;" @click="beforeUploadCheck">excel匯入</a-button>
<a-upload v-show="isUpload" accept=".xls,.xlsx" :showUploadList="false" :customRequest="selfUpload" :beforeUpload="beforeUpload" ref="upload">
<a-button ref="beforeUpload" type="primary" style="margin-bottom:10px;">excel匯入</a-button>
</a-upload>
onChange監聽部分程式碼
checkUpload(value, type) {
//由於運營商在不斷申請新號段,實際專案中不建議將手機號校驗做的太過細緻
var moblieCheck = /^1\d{10}$/;
if(type == 1){
if(this.username == null || this.username == ''){
this.isUpload = false;
return ;
}
if(!moblieCheck.test(value)){ //此處不要使用vue的雙向繫結獲取當前內容,使用@change傳遞的資料
this.isUpload = false;
return ;
}
}else{
if(value == null || value == ''){ //此處不要使用vue的雙向繫結獲取當前內容,使用@change傳遞的資料
this.isUpload = false;
return ;
}
if(!moblieCheck.test(this.usertel)){
this.isUpload = false;
return ;
}
}
this.isUpload = true;
},
校驗和提示部分程式碼
beforeUploadCheck(){
if(this.username == null || this.username == ''){
this.isUpload = false;
this.$message.error('姓名必須填寫');
return ;
}
//由於運營商在不斷申請新號段,實際專案中不建議將手機號校驗做的太過細緻
var moblieCheck = /^1\d{10}$/;
if(!moblieCheck.test(this.usertel)){
this.isUpload = false;
this.$message.error('電話號碼格式不正確');
return ;
}
}
校驗檔案,這裡是校驗檔案是excel
beforeUpload(file) {
const isExcel =
file.type == 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' || file.type == 'application/vnd.ms-excel';
//此處需要特別注意,使用file.type進行校驗是不可靠的,並非所有系統和瀏覽器都能獲取file.type的資訊,比如同為chrome,在mac環境是無法獲取到file.type的
var suffix = file.name.substr(file.name.lastIndexOf("."));
if (!isExcel && (".xls" != suffix && ".xlsx" != suffix)) {
this.$message.error('請上傳excel檔案');
}
const isLt2M = file.size / 1024 < 20000 && file.size / 1024 > 5;
if (!isLt2M) {
this.$message.error('檔案大小應在10KB~20MB之間');
}
return isExcel && isLt2M;
}
上傳檔案方法
selfUpload({ action, file, onSuccess, onError, onProgress }) {
let formData = new FormData();
formData.append('file', file);
formData.append('username', this.username);
formData.append('usertel', this.usertel);
excelUpload(formData) //上傳檔案的js,這裡不放出了
.then(res => {
if (res == 200) {
this.$message.success('操作成功');
}else{
this.$message.error('操作失敗');
}
})
.finally(() => {
//處理無論成功失敗必定進行的程式碼
});
}
後記
作為adnt框架的新手,在想到需要選擇檔案前進行校驗的需求後查閱官方文件並沒有得到滿意的結果,於是自己想出了這麼一個“偏門”的解決方案達到了近似的效果
相關文章
- eslint 當前檔案 不校驗 /* eslint-disable */EsLint
- 檔案下載時前後臺MD5校驗
- MinIO上傳和下載檔案及檔案完整性校驗.
- Spring MVC 檔案上傳、Restful、表單校驗框架SpringMVCREST框架
- 二進位制檔案和符號檔案(PDB)如何校驗是否匹配符號
- rpm包的校驗和檔案讀取
- Spring boot 生成動態驗證碼並前後端校驗Spring Boot後端
- antd日期選擇框,前後日期增加限制
- PHP透過pem檔案校驗簽名異常PHP
- 關於FileDownloader檔案長度校驗的問題
- input檔案選擇框檔案過濾引數accept
- antd頁面多表單校驗
- java檔案相關(檔案追加內容、檔案內容清空、檔案內容讀取)Java
- golang寫入檔案時,覆蓋前檔案(將前檔案清空)Golang
- 檔案上傳進度提示
- 行式填報 資料校驗 --- 小計校驗
- input 實現檔案上傳,並驗證檔案不大於5M
- C# 鏈式程式設計實踐之檔案校驗C#程式設計
- C++ 獲取PE檔案自校驗值的程式碼C++
- 工作經驗: linux 壓縮當前資料夾下所有檔案Linux
- iOS感測器:App前後臺切換後,獲取敏感資訊使用touch ID進行校驗iOSAPP
- 【java】校驗當前時間是否在規定的時間內Java
- 使用Blazor WASM實現可取消的多檔案帶校驗併發分片上傳BlazorASM
- 從單機到分散式微服務,大檔案校驗上傳的通用解決方案分散式微服務
- 檔案MD5校驗碼的安全性及重要性
- vxe-table 校驗,根據行屬性校驗
- 前後端實現登入token攔截校驗後端
- Node 在 Controller 層如何進行資料校驗Controller
- python中修改檔案行內容Python
- [React]antd表單校驗函式寫法React函式
- LIUNUX如何擷取txt檔案中的內容,並建立新檔案UX
- 資料校驗
- 企業如何選擇檔案傳輸軟體?曝光6招內行方法
- 封裝axios請求並對提交引數進行校驗封裝iOS
- uniapp 檔案選擇APP
- springMVC:校驗框架:多規則校驗,巢狀校驗,分組校驗;ssm整合技術SpringMVC框架巢狀SSM
- jQuery Validate驗證上傳檔案大小jQuery
- SpringBoot專案校驗規則優化Spring Boot優化