首页 > 其他分享 >vue实现视频上传功能

vue实现视频上传功能

时间:2023-10-10 13:57:12浏览次数:30  
标签:视频 vue const uploadInfo uploadAuthInfo data console 上传

本文实例为大家分享了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
}
})
}

 

以上就是本文的全部内容,希望对大家的学习有所帮助

 

参考文章:http://blog.ncmem.com/wordpress/2023/10/10/vue%e5%ae%9e%e7%8e%b0%e8%a7%86%e9%a2%91%e4%b8%8a%e4%bc%a0%e5%8a%9f%e8%83%bd/

欢迎入群一起讨论

 

 

 

标签:视频,vue,const,uploadInfo,uploadAuthInfo,data,console,上传
From: https://www.cnblogs.com/songsu/p/17754480.html

相关文章

  • Lnton羚通视频分析算法开发平台建立工地人员入侵,构建工地实名制人员通道系统解决方案
    Lnton羚通的算法算力云平台是一款优秀的解决方案,具有突出的特点。它提供高性能、高可靠性、高可扩展性和低成本的特性,使用户能够高效地执行复杂计算任务。此外,平台还提供丰富的算法库和工具,并支持用户上传和部署自定义算法,提升了平台的灵活性和个性化能力。建筑工地的管理一直以来......
  • 快速高效!如何轻松下载tiktok视频并去除水印
    TikTok作为全球最受欢迎的短视频平台之一,吸引了无数用户分享创意和欢乐。如果你想将喜爱的TikTok视频保存到本地,而又不想被水印困扰,那么这篇文章将向你介绍一款简单易用的APP,让你轻松下载TikTok视频并去除水印。①在tiktok上找到喜欢的视频,点击复制视频链接②打开【大神水印】(io......
  • 国标GB28181视频智能分析EasyCVR智能视频分析助力智慧城市发展
    国标GB28181视频智能分析平台可以实现对视频内容的实时监控和分析。通过对视频数据进行实时采集和传输,系统可以对视频画面进行实时分析和处理,包括人脸识别、车牌识别、行为分析等。这些功能可以帮助用户快速获取视频中的关键信息,提高安全防范能力。一、智能视频分析技术在智慧......
  • vue上传视频插件
    视频作为一种信息表达方式,越来越受到人们的关注和喜爱。近年来,随着移动互联网的普及,手机、平板电脑等设备可以随时随地观看视频。在开发网站或移动应用时,上传和展示视频成为一项不可或缺的功能。Vue作为一种现代化JavaScript框架,提供了丰富的开发工具和插件,其中视频上传插件是Vue......
  • vue之修饰符
    1.简介修饰符是以半角句号.指明的特殊后缀2.常用修饰符2.1.prevent:阻止事件默认行为可以告诉v-on指令对于触发的事件调用event.preventDefault(),一般用于表单提交、a标签的click事件等<formv-on.prevent="onSubmit"></form><ahref="www.baidu.com"@click.pre......
  • 02vue之调试工具vue-devtools
    1下载插件可以在https://chrome.zzzmh.cn/#/index这里直接下载,然后直接拖入扩展程序即可2下载包2.1从github克隆项目gitclonehttps://github.com/vuejs/vue-devtools2.2在vue-devtools目录下安装依赖包cdvue-devtoolsnpminstall2.3修改manifest.json文......
  • 视频后缀PDF改MP4
    importoscurrent_dir="D:\百度网盘\Download\F-罚丨Z\\"#需要改file_iterator=os.scandir(current_dir)forfile_infoinfile_iterator:houzhui=file_info.name.split(".")iflen(houzhui)>=2:ifhouzhui[1]=="pdf&......
  • 国标GB28181视频智能分析平台EasyGBS智能视频分析监控和安全方案
    国标GB28181视频智能分析平台可以实现对视频内容的实时监控和分析。通过对视频数据进行实时采集和传输,系统可以对视频画面进行实时分析和处理,包括人脸识别、车牌识别、行为分析等。这些功能可以帮助用户快速获取视频中的关键信息,提高安全防范能力。智能视频分析的工作原理:智能......
  • 前端、Vue.js和SVG的一些知识
    前端、Vue.js和SVG的一些知识一、前端简介  1、什么是HTML(静态)(超文本标记语言HyperTextMarkupLanguage),HTML是用来描述网页的一种语言。  2、CSS(层叠样式表CascadingStyleSheets),样式定义如何显示HTML元素,语法为:selector{property:value}(选择符{属性:值}) ......
  • 国标GB28181协议视频平台LntonGBS内网访问正常,公网无法访问是什么原因?
    国标视频云服务平台LntonGBS可支持通过国标GB28181协议,接入多路视频源设备,实现视频流的接入、转码、处理与分发等功能,对外输出的视频流格式包括RTSP、RTMP、FLV、HLS、WebRTC等。平台视频能力丰富灵活,包括监控直播、视频分发、录像、回看与检索、云存储、语音对讲、告警上报、云台......