最近在用 Vue 開發項目的時候有一個需求,須要導入 word 文檔,而且須要支持多選。element-ui 的 upload 組件支持多選文件,只須要配置參數 multiple 爲 true 便可。可是這個組件默認會將多選的文件分屢次進行上傳,因而就會存在屢次的上傳請求,因爲後臺的接口要求是一次請求可以上傳多個文件,且咱們也知道請求多了會對服務器形成更大的壓力,於是基於多種緣由,這個 upload 的上傳行爲得進行改造一番。html
改造前的結果:同時上傳2個文件,會發出2次對接口的請求,每次請求裏包含了一個文件。element-ui
改造後的結果:同時上傳2個文件,會發出一次接口請求,接口入參裏包含2個文件。數組
html部分:服務器
<el-uploadclass="upload-demo list-uploadbtn"ref="upload":action="curBastUrl":auto-upload="false":on-remove="updataRemove":before-upload="beforeUpload":on-change="updatachange":file-list="fileList":multiple="true"><el-button size="small">點擊上傳</el-button></el-upload><el-button type="primary" @click="submitUpload">確 定</el-button>複製代碼
js部分:app
submitUpload() { // 導入let formData = new FormData(); // 用FormData存放上傳文件this.fileList.forEach(file => { formData.append('file', file.raw) }) formData.append('categoryDirectory', this.filedata.categoryDirectory)// importCase是上傳接口importCase(formData).then((res) => { //手動上傳沒法觸發成功或失敗的鉤子函數,所以這裏手動調用 this.updataSuccess(res.data) }, (err) => { }) }複製代碼
關鍵代碼說明:ide
html部分:函數
<el-uploadclass="upload-demo list-uploadbtn"ref="upload":action="curBastUrl":auto-upload="false":http-request="uploadFile":on-remove="updataRemove":before-upload="beforeUpload":on-change="updatachange":multiple="true"><el-button size="small">點擊上傳</el-button></el-upload><el-button type="primary" @click="submitUpload">確 定</el-button>複製代碼
js部分:ui
submitUpload() { // 導入let tempData = this.filedatathis.filedata = new FormData() // 用FormData存放上傳文件this.$refs.upload.submit() // 會循環調用uploadFile方法,多個文件調用屢次this.filedata.append('categoryDirectory', tempData.categoryDirectory)// importCase是上傳接口importCase(this.filedata).then((res) => { //手動上傳沒法觸發成功或失敗的鉤子函數,所以這裏手動調用 this.updataSuccess(res.data) }, (err) => { }) }uploadFile(file) {this.filedata.append('file', file.file) }複製代碼
關鍵代碼說明:this