tft每日頭條

 > 科技

 > vue如何取得文件上傳時的進度

vue如何取得文件上傳時的進度

科技 更新时间:2024-12-13 17:56:26

vue如何取得文件上傳時的進度(vue上傳文件時的一些定制操作)1

上傳文件時,有時候會碰到需要額外傳遞一些參數,顯示上傳的進度之類,這裡分享下之前做過的一些處理。

vue裡一般上傳文件會用到一些組件,本次使用的是el-upload,這裡隻是介紹一種思路, 其他的組件類似,有碰到類似問題的,歡迎探讨。 前端小白,涉及到的代碼可能會有點粗糙,歡迎來噴。

一開始在demo的時候,直接用的axios,按照官方的文檔,還是比較順利的。不過一般vue項目裡裡都會封裝一個http請求的攔截器,用來做一些請求的攔截和一些必要信息的傳遞。自然為了統一,上傳文件的内容也會使用到這個封裝的請求。

http攔截器部分代碼如下:(保存的文件位置和文件名是在utils/request.js裡

import axios from 'axios' import { Message } from 'element-ui' const baseURL = process.env.NODE_ENV === 'development' ? 'http://127.0.0.1:8080/api' : 'http://127.0.0.1/api' const instance = axios.create({ baseURL, timeout: 30000, withCredentials: true }) instance.interceptors.request.use( config => { config.headers['Authorization'] = 'Bearer ' localStorage.getItem('token') return config }, error => { Message({ showClose: true, message: error, type: 'error' }) Promise.reject(error) } )

axios有一個配置項是onUploadProgress, 主要就是獲取文件上傳進度的,上面的通用封裝沒有這個選項,但是我們可以在需要使用的地方,加入這個配置項,比如下面的這個upload方法

import request from '@/utils/request' function upload(data, config = {}) { return request({ url: '/upload', method: 'POST', data: data, ...config }) }

在實際的業務的vue代碼裡, template組件部分

<el-upload ref="newupload" class="upload-file" drag :before-upload="beforeUpload" multiple action="no" :http-request="doUpload" :auto-upload="false" accept=".mp4,.flv,.mov" :on-change="handleChange" :on-success="handlesuccess" > <i v-if="uploadFlag === false" class="el-icon-upload" /> <div v-if="uploadFlag === false" class="el-upload__text"> 将文件拖到此處,或<em>點擊上傳</em> </div> <el-progress v-if="uploadFlag === true" type="circle" :percentage="uploadPercent" style="margin-top: 30px;" /> <div slot="tip" class="el-upload__tip"> 請注意您隻能上傳.mp4 .flv .mov格式的視頻文件 </div> </el-upload>

注意,上述需要使用el-upload的http-request方法,如果不用的話,直接使用原生的action方式,就沒法攜帶額外的參數了

vue文件中的script代碼,就可以使用上面封裝的upload方法了,部分doUpload方法的代碼如下:

// 上傳文件是Form表單,但是el-upload默認的形式,沒法額外增加其他參數 // 這裡新定義一個FormData對象 let fd = new FormData() let self = this // video屬性綁定了二級制文件流内容 fd.append('video', val.file) // 這裡可以攜帶另外參數,用fd.append的形式即可 fd.append('Content-Type', 'video/mp4') // 調用前面封裝的upload方法 upload(fd, { onUploadProgress(progress) { // uploadPercent的值是el-progress組件綁定的值 self.uploadPercent = Math.round( (progress.loaded / progress.total) * 100 ) } }).then(res => { console.log(res) })

這裡upload的參數,傳入了一個{}類型,方法是onUploadProgress,axios其他的配置,也可以用類似的思路來增加。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved