本文实例为大家分享了vue实现视频上传功能的具体代码,供大家参考,具体内容如下
环境:vue + TS 上传视频 + 上传到阿里云
主要处理前端在vue下上传视频
使用的是阿里云的视频点播服务
1、需要后台去申请一个开发API,请求阿里云的接口访问控制
2、有了开发视频的token,供给前端
3、前端去请求阿里云存储
video.vue
<template> <div class=\"container\"> <el-card> <div slot=\"header\"> <div>课程:</div> <div>阶段:</div> <div>课时:</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\" >开始上传</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({ // 阿里账号ID,必须有值 ,值的来源https://help.aliyun.com/knowledge_detail/37196.html userId: 1618139964448548, // 上传到点播的地域, 默认值为\'cn-shanghai\',//eu-central-1,ap-southeast-1 region: \'cn-shanghai\', // 分片大小默认1M,不能小于100K partSize: 1048576, // 并行上传分片个数,默认5 parallel: 5, // 网络原因失败时,重新上传次数,默认为3 retryCount: 3, // 网络原因失败时,重新上传间隔时间,默认为2秒 retryDuration: 2, // 开始上传 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\') }, // 文件上传进度,单位:字节 onUploadProgress: function (uploadInfo, totalSize, loadedPercent) { }, // 上传凭证超时 onUploadTokenExpired: function (uploadInfo) { console.log(\'onUploadTokenExpired\') }, // 全部文件上传结束 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(\'转码进度\', 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 } }) }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
© 版权声明
THE END
暂无评论内容