IE9 elementUI文件上傳的問題解決
問題: IE9中無法使用FormData
思路
- 基于上面的問題,需要使用form表單上傳文件
- form表單上傳會引起頁面的刷新,因此需要動態(tài)添加一個iframe來避免頁面刷新
- from表單上傳之后需要調(diào)用回調(diào),此時需要監(jiān)聽iframe的onload事件
坑
- 文件上傳之后的返回值 Content-Type值不能是application/json 這會導致IE去解析返回結果,最終調(diào)用文件的保存或者打開,此處需要與后端協(xié)商將Content-Type改為text/plain
- 如果需要圖片回顯,回顯的圖片路徑中有有query參數(shù),如果有多個參數(shù)會出現(xiàn)&,但是返回結果顯示在iframe中所以&會被當做HTML解析為&所以回顯之前需要將此處轉換回來
問題解決
項目使用VUE編寫,UI是ElementUI,但是Element官方明確了upload方面是不支持IE9的,看源碼的意思是已經(jīng)擱置了iframe上傳的后續(xù)開發(fā)
改用vue-upload-component 作者對IE9專門做了兼容,就是使用起來理解成本有點兒高
如何觸發(fā)上傳
通過ref獲取upload實例,在添加文件時 激活上傳
this.$refs.upload.active = true
如何判斷當前上傳的狀態(tài)(添加,更新,刪除,上傳成功,上傳失?。?/p>
每次上傳的狀態(tài)變化時 都會調(diào)用@input-file綁定的回調(diào),形參是newFile, oldFile,通過新舊文件的對比來得到當前的狀態(tài),感覺有點兒反策略模式的意思,自己通過元狀態(tài)的組合來得到當前狀態(tài),習慣的話覺得還是挺有意思的
inputFile(newFile, oldFile) { // 舊文件活躍 新文件不活躍 此時上傳過程完成 if (newFile && oldFile && !newFile.active && oldFile.active) { this.$refs.upload.active = false // 獲得相應數(shù)據(jù) let res = '{}' // 此處判斷相對簡單,可以參考jquery.form.js中做的判斷 if (/<pre/.test(newFile.response)) { res = />(.*)</.exec(newFile.response)[1] } res = JSON.parse(res) if (res.code !== 200) { if (res.code === 402) { this.$route.push('/login') return } Message.error(res.message) } else { Message.success('上傳成功') // 回顯圖片 this.upload.url = res.data.url.replace(/&/g, '&') } if (newFile.xhr) { // 獲得響應狀態(tài)碼 console.log('status', newFile.xhr.status) } } // 添加文件 if (newFile && !oldFile) { this.$refs['upload' + this.index].active = true } }
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
- element-ui 中使用upload多文件上傳只請求一次接口
- element-ui 文件上傳修改文件名的方法示例
- element-ui多文件上傳的實現(xiàn)示例
- element-ui upload組件多文件上傳的示例代碼
- vue+elementUI實現(xiàn)多文件上傳與預覽功能實戰(zhàn)記錄(word/PDF/圖片/docx/doc/xlxs/txt)
- Django后端分離 使用element-ui文件上傳方式
- VUE+element-ui文件上傳的示例代碼
- vue+element-ui+axios多文件上傳的實現(xiàn)并顯示整體進度
- elementui+vue+axios實現(xiàn)文件上傳本地服務器
- VUE學習之Element-ui文件上傳實例詳解
相關文章
Vue報錯Syntax?Error:TypeError:?this.getOptions?is?not?a?
前幾天在vue運行項目過程中報錯了,所以下面這篇文章主要給大家介紹了關于Vue報錯Syntax?Error:TypeError:?this.getOptions?is?not?a?function的解決方法,需要的朋友可以參考下2022-07-07vue+elementUI組件table實現(xiàn)前端分頁功能
這篇文章主要為大家詳細介紹了vue+elementUI組件table實現(xiàn)前端分頁功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12