本文小編為大家詳細介紹“element-ui中upload組件傳遞文件及其他參數(shù)問題如何解決”,內容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“element-ui中upload組件傳遞文件及其他參數(shù)問題如何解決”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
成都創(chuàng)新互聯(lián)公司專注于潞城企業(yè)網站建設,響應式網站建設,成都商城網站開發(fā)。潞城網站建設公司,為潞城等地區(qū)提供建站服務。全流程按需搭建網站,專業(yè)設計,全程項目跟蹤,成都創(chuàng)新互聯(lián)公司專業(yè)和態(tài)度為您提供的服務
首先在element-ui的官網里有對upload組件的簡單的介紹
點擊上傳 只能上傳jpg/png文件,且不超過500kb
其實upload就是對input type="file"做了幾層樣式封裝
我第一個不理解的就是action中的url,我后臺使用的是PHP語言,根據(jù)我之后的理解,這個url其實就是你PHP使用的上傳的函數(shù),就和form中的action一樣,不一樣的是我找了好久也沒發(fā)現(xiàn)是否能修改默認的post傳遞方式
對PHP提供的url進行傳參,這是最直接能想到的方式,但是因為action中是post方式的,而PHP后臺我使用的restful方式的url,post方式無法實現(xiàn)傳參,我試了好幾種都沒能成功,也不知道要如何改成get方式
第一種方案只能放棄
放棄action,在找了好多資料后發(fā)現(xiàn)可以不使用action,而是用before-upload屬性,這是一個function類型的屬性,默認參數(shù)是當前文件,只要能傳遞這個文件也能實現(xiàn)效果
要傳遞這個方法就需要new一個formdata對象,然后對這個對象追加key和value,類似于postman測試時那樣
具體網上有人給的例子,差不多如下
beforeUpload (file) { let fd = new FormData() fd.append('key', file, fileName) axios.post(url, fd. { //做一些操作 }) return false // false就是不自動上傳,我后來試了發(fā)現(xiàn)都一樣,都不會自動上傳 },
這個感覺可以一試,然后我理所當然的寫了一下的方式
beforeUpload (file,id) { let fd = new FormData() fd.append('key', file, fileName) axios.post(url, fd. { data:{ id:id } }) return false // false就是不自動上傳,我后來試了發(fā)現(xiàn)都一樣,都不會自動上傳 },
然后我發(fā)現(xiàn)無論怎么樣我都只能傳過去id,在PHP代碼中dump(_FLIES)永遠是NULL,這就非?;鸫罅耍榱撕镁脹]有解決方法,之后發(fā)現(xiàn)我用的Content-Type應該是multipart/form-data,而f12中調試頁面是application/json; charset=utf-8,我就覺得是不是這個的問題,于是在代碼中又加了headers
beforeUpload (file,id) { let fd = new FormData() fd.append('key', file, fileName) axios.post(url, fd. { data:{ id:id }, headers: { 'Content-Type': 'multipart/form-data' } }) return false // false就是不自動上傳,我后來試了發(fā)現(xiàn)都一樣,都不會自動上傳 },
這次報的錯是axios Missing boundary in multipart/form-data,沒有邊界,很頭疼無語
后來發(fā)現(xiàn)Content-Type是自動識別然后加邊界的,也有人說要把Content-Type定義為undefined,還是不行,只是自動識別Content-Type,
再后來發(fā)現(xiàn)原來傳遞formdata和data不能一起傳遞,要傳遞formdata就不能有data,所以要改為
beforeUpload (file,id) { let fd = new FormData() fd.append('file', file) fd.append('id',id) axios.post(url, fd, { }) return false // false就是不自動上傳,我后來試了發(fā)現(xiàn)都一樣,都不會自動上傳 },
這樣就可以了
以下是我的代碼
el-button type="primary" @click="newSubmitForm()" class="yes-btn"> 確 定 將文件拖到此處,或點擊上傳請注意您只能上傳.mp4 .flv .mov格式的視頻文件重 置
beforeUpload (file) { console.log(file) let fd = new FormData() fd.append('file', file) fd.append('groupId', this.groupId) // console.log(fd) newVideo(fd).then(res => { console.log(res) }) return true },
newSubmitForm () { this.$refs.newupload.submit() },
export function newVideo (data) { return axios({ method: 'post', url: 'http://localhost:8086/Platform1-back-end/public/admin/VideoBase/newVideo', timeout: 20000, data: data }) }
我是把axios集中放在一個文件,與vue文件分離了,其實都差不多
還有就是action中隨便加一個東西會有404錯誤,但是不影響最終效果,介意的可以看看有什么方法去除
方案三 分多次傳值
方案二成功了就沒有試,不過也沒有意義了不方便
讀到這里,這篇“element-ui中upload組件傳遞文件及其他參數(shù)問題如何解決”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。