vue封裝el-upload批量上傳隻請求一次接口
1.概述
el-upload組件默認批量上傳邏輯是可以批量選擇文件,點擊上傳時候是每個文件調用一次接口,請求接口時不是批量傳遞文件。這樣會造成上傳接口頻繁調用,壓力增大,不利於接口的穩定性。
因此我們需要對el-upload組件進行封裝,實現批量文件上傳隻調用一次接口。
2.封裝el-upload組件實現批量上傳
1.引入上傳組件
在vue的template標簽中引入el-upload組件,引入代碼和屬性說明如下。
el-upload組件封裝參數介紹
- multiple:默認true,批量選擇屬性。
- action: 上傳接口地址,這裡我們使用自定義方式上傳,因此這個值為空。
- show-file-list: 是否顯示選擇文件的列表
- auto-upload: 選擇文件後是否自動上傳,這裡必須設置為不自動上傳,使用我們封裝的方法上傳
- http-request:覆蓋action默認的上傳行為,使用自定義方式上傳。
<el-upload ref="upload" multiple action="" :show-file-list="false" :auto-upload="false" :http-request="uploadFile"> <el-button slot="trigger" size="small" type="primary">選取文件</el-button> <el-button style="margin-left: 10px" size="small" type="success" @click="submitUpload">上傳到服務器</el-button> <div slot="tip" class="el-upload__tip">隻能上傳jpg/png文件,且不超過5G</div> </el-upload>
2.封裝自定義上傳方法
上面我們引入el-upload組件時,使用http-request屬性覆蓋瞭默認的上傳行為,使用自定義的上傳行為,下面就來封裝自定義的上傳方法。
在vue頁面的
<script> export default { data() { return { // 上傳的多個文件 files: [], } }, methods: { // 將選擇的批量文件添加到files數組中 uploadFile(raw) { this.files.push(raw.file) }, // 請求後端上傳接口上傳文件 async submitUpload() { // el-upload原始上傳方法 this.$refs.upload.submit() // 創建FormData對象,通過該對象實現批量文件上傳 let fd = new FormData() // 因為要上傳多個文件,所以需要遍歷一下才行,不要直接使用我們的文件數組進行上傳,你會發現傳給後臺的是兩個Object this.files.forEach(function (file) { // 遍歷files數組,將file添加到FormData對象中 fd.append("file", file, file.name) }) // 請求後端接口 nanoApi .uploadFile(fd) .then((res) => { console.log("上傳文件", res) }) .catch((error) => { console.log("上傳失敗" + error) }) }, } } </script>
3.axios封裝
axios是封裝好的,下面是請求上傳接口參數。
uploadFile(data) { return request({ url: `/api/v1/upload`, method: "post", //Content-Type請求類型必須設置為multipart/form-data headers: { "Content-Type": "multipart/form-data", }, // 上傳文件 data, }) },
到此這篇關於vue封裝el-upload批量上傳隻請求一次接口的文章就介紹到這瞭,更多相關vue el-upload上傳請求接口內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- 解析element-ui中upload組件傳遞文件及其他參數的問題
- elementUI自定義上傳文件功能實現(前端後端超詳細過程)
- Vue使用formData格式類型上傳文件的示例
- 解決axios發送post請求上傳文件到後端的問題(multipart/form-data)
- Vue使用axios圖片上傳遇到的問題