如何在ElementUI的上傳組件el-upload中設(shè)置header
在ElementUI上傳組件el-upload中設(shè)置header
在vue項(xiàng)目中我們發(fā)送ajax請求一般都會使用axios,并在axios中設(shè)置axios.defaults.baseURL,請求的基本地址,并在請求攔截器中設(shè)置headers
axios.interceptors.request.use(config=>{
? NProgress.start();
? // 發(fā)送請求需帶上token
? config.headers.Authorization=window.sessionStorage.getItem("token")
? return config;
})使用el-upload上傳組件時(shí),action 為必選參數(shù),上傳的地址。
但此時(shí)我們?yōu)閍ction填寫地址不能不寫基本地址而僅寫upload,要寫完整的地址。
這是因?yàn)閑l-upload上傳組件在上傳發(fā)送請求時(shí),不會去使用我們設(shè)置的axios,而是在組件內(nèi)部自己封裝了自己的請求方法。所以我們必須把地址寫完整。
那有時(shí)在上傳時(shí)會報(bào)出錯誤,例如‘無效token’,這是因?yàn)槲覀儧]有為此上傳請求設(shè)置請求頭部。el-upload組件有一個屬性headers ,設(shè)置上傳的請求頭部
?<el-upload ? ? ? ? ? ? ? action="http://127.0.0.1:8888/api/private/v1/upload" ? ? ? ? ? ? ? :headers="headerObj" ? ? ? ? ? ? ? :on-preview="handlePreview" ? ? ? ? ? ? ? :on-remove="handleRemove" ? ? ? ? ? ? ? :on-success="handleSuccess" ? ? ? ? ? ? ? list-type="picture" ? ? ? ? ? ? > ? ? ? ? ? ? ? <el-button size="small" type="primary">點(diǎn)擊上傳</el-button> ? ? ? ? ? ? ? <div slot="tip" class="el-upload__tip"> ? ? ? ? ? ? ? ? 只能上傳jpg/png文件,且不超過500kb ? ? ? ? ? ? ? </div> ? ? ? ? ? ? </el-upload>
在data中定義headerObj
headerObj: {
? ? ? ? Authorization: window.sessionStorage.getItem("token"),
? ? ? },element-ui中的upload組件使用總結(jié)
使用upload組件:
<el-upload ? ?class="upload-demo" ? ?ref="uploadFile" ? ?:on-change="beforeUpload" ? ?:action="uploadUrl" ? ?:headers="myHeader" ? ?:on-remove="handleRemove" ? ?:before-remove="beforeRemove" ? ?:limit="1" ? ?:auto-upload="false" ? ?:on-exceed="handleExceed" > <el-button size="small" type="primary">選擇文件</el-button>
action: 是請求后端接口的路徑 (必填的)header: 是配置請求頭的 / 在此處帶了tokenon-change: 文件狀態(tài)改變時(shí)的鉤子,添加文件、上傳成功和上傳失敗時(shí)都會被調(diào)用on-remove: 是文件列表中移除文件時(shí)執(zhí)行的before-remove: 刪除文件之前執(zhí)行的,可以用作提示用戶二次確認(rèn)刪除limit: 是上傳文件的個數(shù)auto-upload: 是控制是否自動上傳的on-exceed: 上傳文件個數(shù)超過限制的時(shí)候執(zhí)行的
此處添加的ref是為了在用戶點(diǎn)擊關(guān)閉后清空列表
通過clearFiles方法,這也是element提供的。
addDialogClose(){
? this.$refs.ruleForm.resetFields();
? this.addClassroomShow = false
? this.$refs.upload.clearFiles();
}在使用時(shí)最坑的地方就是action屬性不能及時(shí)響應(yīng)數(shù)據(jù)跟新,總是晚一步。
使用了before-upload、on-progress都不行,數(shù)據(jù)已經(jīng)更改,但是action里還是舊的。
研究一下午:
將auto-upload屬性設(shè)置為false,
然后使用了on-change
在on-change鉤子中,去判斷文件后綴,來確定文件類型,來確定調(diào)用不同的接口
然后通過ref屬性去執(zhí)行上傳
beforeUpload(file) {
? if(/\.(mp4|m3u8|rmvb|avi|swf|3gp)$/.test(file.name)) {
? ? ?this.ruleForm.uploadUrl = this.vidoeUploadUrl
? }else{
? ? ?this.ruleForm.uploadUrl = this.fileUploadUrl
? }
? this.$nextTick(()=>{
? ? ?this.$refs.uploadFile.submit()
? })
},此時(shí)就ok了!
如果action是死路徑就不需要考慮這些問題了。如果是動態(tài)的,就讓它異步,或給它加個延時(shí)器。
總結(jié):upload組件已經(jīng)封裝的很好了,只是action屬性是必填的,有點(diǎn)坑。以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Vue生態(tài)系統(tǒng)工具庫Vueuse的使用示例詳解
Vueuse 是一個功能強(qiáng)大的 Vue.js 生態(tài)系統(tǒng)工具庫,它提供了一系列的可重用的 Vue 組件和函數(shù),本文將介紹 Vueuse 的主要特點(diǎn)和用法,以及它在 Vue.js 開發(fā)中的作用和優(yōu)勢,感興趣的可以了解下2024-02-02
vue集成kindeditor富文本的實(shí)現(xiàn)示例代碼
這篇文章主要介紹了vue集成kindeditor富文本的實(shí)現(xiàn)示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用vue具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Vue登錄頁面的動態(tài)粒子背景插件實(shí)現(xiàn)
本文主要介紹了Vue登錄頁面的動態(tài)粒子背景插件實(shí)現(xiàn),將登錄組件背景設(shè)置為 "粒子背景",具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07
Vuex實(shí)現(xiàn)數(shù)據(jù)增加和刪除功能
今天小編就為大家分享一篇Vuex實(shí)現(xiàn)數(shù)據(jù)增加和刪除功能,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-11-11
詳解vue.js數(shù)據(jù)傳遞以及數(shù)據(jù)分發(fā)slot
本篇文章給大家通過代碼實(shí)例分析了vue.js數(shù)據(jù)傳遞以及數(shù)據(jù)分發(fā)slot的相關(guān)知識,有這方面興趣的朋友參考下吧。2018-01-01
vue項(xiàng)目配置element-ui容易遇到的坑及解決
這篇文章主要介紹了vue項(xiàng)目配置element-ui容易遇到的坑及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07
Vue向后臺傳數(shù)組數(shù)據(jù),springboot接收vue傳的數(shù)組數(shù)據(jù)實(shí)例
這篇文章主要介紹了Vue向后臺傳數(shù)組數(shù)據(jù),springboot接收vue傳的數(shù)組數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-11-11
Vue?Router解決多路由復(fù)用同一組件頁面不刷新問題(場景分析)
這篇文章主要介紹了Vue?Router解決多路由復(fù)用同一組件頁面不刷新問題,多路由復(fù)用同一組件的場景分析,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-08-08

