您好,登錄后才能下訂單哦!
本篇文章為大家展示了使用vue怎么實(shí)現(xiàn)一個(gè)視頻上傳功能,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
Vue具體輕量級(jí)框架、簡(jiǎn)單易學(xué)、雙向數(shù)據(jù)綁定、組件化、數(shù)據(jù)和結(jié)構(gòu)的分離、虛擬DOM、運(yùn)行速度快等優(yōu)勢(shì),Vue中頁(yè)面使用的是局部刷新,不用每次跳轉(zhuǎn)頁(yè)面都要請(qǐng)求所有數(shù)據(jù)和dom,可以大大提升訪問(wèn)速度和用戶體驗(yàn)。
video.vue
<template> <div class="container"> <el-card> <div slot="header"> <div>課程:</div> <div>階段:</div> <div>課時(shí):</div> </div> <el-form label-width="40px"> <el-form-item label="視頻"> <input ref="video-file" type="file" > </el-form-item> <el-form-item label="封面"> <input ref="image-file" type="file" /> </el-form-item> <el-form-item> <el-button type="primary" @click="authUpload" >開(kāi)始上傳</el-button> <el-button>返回</el-button> </el-form-item> </el-form> </el-card> </div> </template> <script> /* eslint-disable */ import axios from 'axios' import { aliyunImagUploadAddressAdnAuth, aliyunVideoUploadAddressAdnAuth, transCodeVideo, getAliyunTransCodePercent } from '@/services/aliyun-oss' export default { data () { return { uploader: null, videoId: null, imageUrl: '', fileName: '' } }, created () { this.initUploader() }, methods: { authUpload () { const videoFile = this.$refs['video-file'].files[0] this.uploader.addFile(videoFile, null, null, null, '{"Vod":{}}') this.uploader.addFile(this.$refs['image-file'].files[0], null, null, null, '{"Vod":{}}') this.fileName = videoFile.name this.uploader.startUpload() }, initUploader () { this.uploader = new window.AliyunUpload.Vod({ // 阿里賬號(hào)ID,必須有值 ,值的來(lái)源https://help.aliyun.com/knowledge_detail/37196.html userId: 1618139964448548, // 上傳到點(diǎn)播的地域, 默認(rèn)值為'cn-shanghai',//eu-central-1,ap-southeast-1 region: 'cn-shanghai', // 分片大小默認(rèn)1M,不能小于100K partSize: 1048576, // 并行上傳分片個(gè)數(shù),默認(rèn)5 parallel: 5, // 網(wǎng)絡(luò)原因失敗時(shí),重新上傳次數(shù),默認(rèn)為3 retryCount: 3, // 網(wǎng)絡(luò)原因失敗時(shí),重新上傳間隔時(shí)間,默認(rèn)為2秒 retryDuration: 2, // 開(kāi)始上傳 onUploadstarted: async uploadInfo => { console.log('onUploadstarted', uploadInfo) let uploadAuthInfo = null if (uploadInfo.isImage) { const { data } = await aliyunImagUploadAddressAdnAuth() this.imageUrl = data.data.imageURL uploadAuthInfo = data.data } else { const { data } = await aliyunVideoUploadAddressAdnAuth({ fileName: uploadInfo.file.name }) this.videoId = data.data.videoId uploadAuthInfo = data.data } // console.log('uploadAuthInfo', uploadAuthInfo) this.uploader.setUploadAuthAndAddress( uploadInfo, uploadAuthInfo.uploadAuth, uploadAuthInfo.uploadAddress, uploadAuthInfo.videoId || uploadAuthInfo.imageId ) }, // 文件上傳成功 onUploadSucceed: function (uploadInfo) { console.log('onUploadSucceed', uploadInfo) }, // 文件上傳失敗 onUploadFailed: function (uploadInfo, code, message) { console.log('onUploadFailed') }, // 文件上傳進(jìn)度,單位:字節(jié) onUploadProgress: function (uploadInfo, totalSize, loadedPercent) { }, // 上傳憑證超時(shí) onUploadTokenExpired: function (uploadInfo) { console.log('onUploadTokenExpired') }, // 全部文件上傳結(jié)束 onUploadEnd: async uploadInfo => { console.log(uploadInfo) console.log({ lessonId: this.$route.query.lessonId, fileId: this.videoId, coverImageUrl: this.imageUrl, fileName: this.fileName }) const { data } = await transCodeVideo({ lessonId: this.$route.query.lessonId, fileId: this.videoId, coverImageUrl: this.imageUrl, fileName: this.fileName }) console.log(data) setInterval(async () => { const { data } = await getAliyunTransCodePercent(this.$route.query.lessonId) console.log('轉(zhuǎn)碼進(jìn)度', data) }, 3000) } }) } } } </script>
aliyun-oss.ts ,存放接口
/** * 阿里云上傳 */ import request from '@/utils/request' export const aliyunImagUploadAddressAdnAuth = () => { return request({ method: 'GET', url: '/boss/course/upload/aliyunImagUploadAddressAdnAuth.json' }) } export const aliyunVideoUploadAddressAdnAuth = (params: any) => { return request({ method: 'GET', url: '/boss/course/upload/aliyunVideoUploadAddressAdnAuth.json', params }) } export const transCodeVideo = (data: any) => { return request({ method: 'POST', url: '/boss/course/upload/aliyunTransCode.json', data }) } export const getAliyunTransCodePercent = (lessonId: string | number) => { return request({ method: 'GET', url: '/boss/course/upload/aliyunTransCodePercent.json', params: { lessonId } }) }
上述內(nèi)容就是使用vue怎么實(shí)現(xiàn)一個(gè)視頻上傳功能,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。