背景
最近測試了element ui前端框架,用到了upload組件,根據element UI官方文檔裏講,我們直接指定action(上傳文件的url),會直接把上傳的文件封裝成formdata,append(file,File),傳給後端。
但是我的需求是把文件當做files的名字傳入,並且要監控上傳過程。因此需要自定義upload上傳方法。
ps:建議上傳多個文件的時候,一定要一個一個傳文件,而不是一下傳好多文件,因爲有接口超時的問題,如果遇到電腦或者瀏覽器版本太低,導致傳入的文件,都是object,element-ui的設計的也是一個一個傳,即使你一下選擇多個文件也是一個一個傳。
需要監控文件上傳進度,我們需要使用到這兩個鉤子on-progress,on-success.
而自定義upload方法,我們需要使用http-request覆蓋默認的上傳行爲,可以自定義上傳的實現。
整個需求來說,我們並沒有監控具體上傳了多少到服務器,而是監控前端是否把文件發送完了,發送完成了就是100%,但是進度還是進行中,如果返回成功了,證明已經上傳成功了,那麼就是完成狀態。
代碼
ps: 下載文件的工具需要加入config.headers['responseType'] = "blob";config.responseType= "blob"
操作如下:
上傳文件的傳入是uploadSectionFile。
我們需要監控upload進度,因此需要在uploadFile裏面增加一個參數,也就是把當前上傳的參數傳遞給方法。
需要在mutiUploadAttach裏面加入監控操作,並調用on-process鉤子
OnProgress就是在執行on-progress的鉤子函數。
uploadFileProcess(event, file, fileList),記住如果操作這個file,是無效的,因爲我們upload組件綁定的是fileList,因此需要找到fileList中對應的file去操作,是progressFlag=true,successFlag=false纔有效。
到了這一步,我們就知道了,file發送的進度。
接下來就是接收完成的回調,因爲發送完成,後端處理也需要一定時間,在沒有返回成功之前也應該是on-progress. 所以progressFlag=true,successFlag=false。
如果文件上傳完成了,就調用onSuccess方法,把文件進度條設置成完成狀態。
至此,自定義上傳進度完成。
下圖是前端發送文件的狀態
下圖是接受到文件上傳成功的狀態