詳解Vue ElementUI手動上傳excel文件到服務(wù)器
概述
具體需求場景如下:
選擇excel文件后,需要把導(dǎo)入的excel文件手動上傳到后臺服務(wù)器,并將導(dǎo)入成功后的統(tǒng)計結(jié)果顯示出來。官網(wǎng)也有手動上傳的示例,通過 action="url" 傳入地址的方式,但在實際項目中請求需要自己配置,下面具體說明實現(xiàn)的方法。
說明:
在上傳文件到展示統(tǒng)計結(jié)果,我們后端給了兩個接口:首先調(diào)用文件上傳接口,上傳成功后,根據(jù)后端返回的mark再調(diào)用統(tǒng)計結(jié)果接口。
屬性設(shè)置
.vue文件
<el-row> <div class="el-form-item__content"> <el-upload ref="upload" accept=".xls,.xlsx" action="#" :auto-upload="false" :multiple="false" :file-list="fileList" :before-upload="beforeUpload" :http-request="uploadHttpRequest" :on-remove="fileRemove" :on-change="fileChange"> <el-button size="small" type="primary">選擇文件</el-button> <div slot="tip" class="el-upload__tip">一次只能上傳一個xls/xlsx文件,且不超過10M</div> </el-upload> </div> </el-row> <el-row> <el-button size="small" @click="closeDialog">取 消</el-button> <el-button type="primary" size="small" @click="submitUpload">上 傳</el-button> <el-button type="primary" size="small" @click="downloadRes">下載反饋結(jié)果</el-button> </el-row>
其中:
- action:上傳的地址,可以不用過多關(guān)注,但也不建議刪除,可用普通字符串代替
- auto-upload:是否自動上傳,因這里是手動上傳,所以設(shè)置為false
- multiple:是否支持多選,此處設(shè)置為 false
- file-list:上傳的文件列表數(shù)組
- before-upload:上傳文件之前的鉤子,參數(shù)為上傳的文件,可以在這里判斷上傳文件的類型,文件大小等
- http-request:自定義上傳的方法,會覆蓋默認(rèn)的上傳行為(即action="url")
- on-remove:上傳文件移除時觸發(fā)的方法
- on-change:上傳文件狀態(tài)(添加,上傳成功或失?。└淖儠r觸發(fā)的方法
處理邏輯
邏輯處理代碼如下:
methods: { // 上傳文件之前的鉤子:判斷上傳文件格式、大小等,若返回false則停止上傳 beforeUpload(file) { //文件類型 const isType = file.type === 'application/vnd.ms-excel' const isTypeComputer = file.type === 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' const fileType = isType || isTypeComputer if(!fileType) { this.$message.error('上傳文件只能是xls/xlsx格式!') } // 文件大小限制為10M const fileLimit = file.size / 1024 / 1024 < 10; if(!fileLimit) { this.$message.error('上傳文件大小不超過10M!'); } return fileType && fileLimit }, // 自定義上傳方法,param是默認(rèn)參數(shù),可以取得file文件信息,具體信息如下圖 uploadHttpRequest(param) { const formData = new FormData() //FormData對象,添加參數(shù)只能通過append('key', value)的形式添加 formData.append('file', param.file) //添加文件對象 formData.append('uploadType', this.rulesType) const url = `${this.myBaseURL}/operation/ruleImport/importData` //上傳地址 axios.post(url, formData) .then( res => { const { data: { code, mark } } = res if(code === 0) { param.onSuccess() // 上傳成功的文件顯示綠色的對勾 this.uploadMark = mark } return this.countData(this.uploadMark) //根據(jù)響應(yīng)的 mark 值調(diào)用統(tǒng)計結(jié)果接口,返回一個promise以便進(jìn)行鏈?zhǔn)秸{(diào)用 }) .then( res => { //鏈?zhǔn)秸{(diào)用,統(tǒng)計結(jié)果的響應(yīng) const { data: { code, data } } = res if(code === 0) { console.log('統(tǒng)計結(jié)果', data) } }) .catch( err => { console.log('失敗', err) param.onError() //上傳失敗的文件會從文件列表中刪除 }) }, // 統(tǒng)計結(jié)果 countFile(mark) { return new Promise((resolve, reject) => { axios .get(`/operation/ruleImport/countData?mark=${mark}`) .then(res => { resolve(res) }) .catch(error => { reject(error) }) }) }, // 點(diǎn)擊上傳:手動上傳到服務(wù)器,此時會觸發(fā)組件的http-request submitUpload() { this.$refs.upload.submit() }, // 文件發(fā)生改變 fileChange(file, fileList) { if (fileList.length > 0) { this.fileList = [fileList[fileList.length - 1]] // 展示最后一次選擇的文件 } }, // 移除選擇的文件 fileRemove(file, fileList) { if(fileList.length < 1) { this.uploadDisabled = true //未選擇文件則禁用上傳按鈕 } }, // 取消 closeDialog() { this.$refs.upload.clearFiles() //清除上傳文件對象 this.fileList = [] //清空選擇的文件列表 this.$emit('close', false) } }
http-request 的param參數(shù),打印結(jié)果如圖。通過param.file取得當(dāng)前文件對象。
以上就是詳解Vue ElementUI手動上傳excel文件到服務(wù)器的詳細(xì)內(nèi)容,更多關(guān)于Vue ElementUI手動上傳excel文件到服務(wù)器的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
vue基礎(chǔ)之v-bind屬性、class和style用法分析
這篇文章主要介紹了vue基礎(chǔ)之v-bind屬性、class和style用法,結(jié)合實例形式分析了vue.js中v-bind綁定及class、style樣式控制相關(guān)操作技巧,需要的朋友可以參考下2019-03-03vue+elementUI多表單同時提交及表單校驗最新解決方案
假設(shè)有一個頁面,需要分三步填寫三個表單,且每個表單位于獨(dú)立的組件中,然后最后保存同時提交,如何進(jìn)行表單必填項校驗,下面小編給大家介紹vue+elementUI多表單同時提交及表單校驗最新解決方案,感興趣的朋友一起看看吧2024-03-03Pinia入門學(xué)習(xí)之實現(xiàn)簡單的用戶狀態(tài)管理
Vue3雖然相對于Vue2很多東西都變了,但是核心的東西還是沒有變,比如說狀態(tài)管理、路由等,再Vue3中尤大神推薦我們使用pinia來實現(xiàn)狀態(tài)管理,他也說pinia就是Vuex的新版本,這篇文章主要給大家介紹了關(guān)于Pinia入門學(xué)習(xí)之實現(xiàn)簡單的用戶狀態(tài)管理的相關(guān)資料,需要的朋友可以參考下2022-11-11