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

vue实现视频上传功能

时间:2023-11-17 14:01:36浏览次数:40  
标签:视频 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实现视频上传功能/


 

 

 

标签:视频,vue,const,uploadInfo,uploadAuthInfo,data,console,上传
From: https://blog.51cto.com/u_14023400/8442372

相关文章

  • 抖音采集视频作品评论、昵称、uid、和评论者二维码,易语言开源版
    用超级列表支持库,不调用浏览器内核就实现的一个抖音采集视频作品评论提取工具,不需要借助任何浏览器内核,也不属于调表类的提取,只用到一个“超级列表框_EXCEL_导入导出模块.ec”模块和“精易模块[v8.2.0].ec”模块就能实现,软件整个框架爱和功能我都设计好了,只需要运行,输入关键词即可......
  • 大文件上传的处理方法——切片上传
    本篇介绍了切片上传的基本实现方式,以及实现切片上传后的一些附加功能,切片上传原理较为简单,代码注释比较清晰就不多赘述了,后面的附加功能介绍了实现原理,并贴出了在原本代码上的改进方式。有什么错误希望大佬可以指出,感激不尽。切片后上传切片上传的原理较为简单,即获取文件后切片,切片......
  • 前端大文件上传如何做到刷新续传?
    前言这两天在学习阿里云oss上传。踩了不少坑,终于实现了大文件分片、断点续传的功能。这篇文章主要分享学习笔记,希望能给大家一些帮助。先看效果 技术栈1.前端:react+Ts+axios上传文件2.Node部分:定义接口、阿里云oss3.socket.io:实时同步上传进度特别说明axios中onUploadPr......
  • java如何做大体积的文件上传和下载
    在Java中,实现大体积文件的上传和下载涉及到处理文件的分片、并发上传、断点续传等问题。本文将详细介绍如何通过Java实现大体积文件的上传和下载。1.文件上传文件上传是将本地文件上传到服务器的过程。对于大体积文件的上传,我们可以将文件分成多个小片段进行并发上传。1.1文件分......
  • 前端如何实现大文件上传
    在开发过程中,经常会遇到一些较大文件上传,如果只使用一次请求去上传文件,一旦这次请求中出现什么问题,那么无论这次上传了多少文件,都会失去效果,用户则需要重新上传所有资源。所以就想到一种方式,将一个大文件分成多个小文件,这样通过多个请求实现大文件上传。接下来我们就来看看具体是怎......
  • 小红书视频作品评论用户ID提取,采集关键词工具,精易VIP模块轻松实现
    那么这个工具只是一个开源版,我会把源码,DLL命令,变量,都会公布出来,这样才完整,你可以直接复制去用,不像网上的一些博主就分享一个窗口的代码,用户复制发现缺少这个又缺少那个,非常麻烦,我这边分享的都是完整的哈。实现原理是通过精易VIP助手,它使用C++开发的,直接调用谷歌浏览器官方内核,可......
  • vue+pdfh5实现将pdf渲染到页面上
    版本:[email protected]+.netCore6.0webapi方法一:通过访问后端获取二进制数据来渲染前端渲染<template><vol-boxref="box":width="width":height="height"><divid="demo"ref="render"></div></vol......
  • 小红书视频评论区提取工具,用户ID关键词用户采集,易语言调用谷歌内核实现
    这个原理就是调用了精易VIP模块的谷歌浏览器内核,然后截取数据包,网页会通过命令自动下滑,然后视频下面的评论区很快都会加载出来,而加载出来的数据包通过精易vip模块的数据截取命令截取,然后把数据提取到指定的变量里面,然后通过JSON命令解析采集出来的评论用户ID、关键词、时间等信息,......
  • vue3 使用 store
    在script中使用storehttps://blog.csdn.net/SubStar/article/details/116077737<script>import{getCurrentInstance}from"vue";import{useStore}from"vuex";exportdefault{setup(){//第一种方法:获取路由对象router的方法1constv......
  • 大文件断点续传上传
    最近接到一个新的需求,需要上传2G左右的视频文件,用测试环境的OSS试了一下,上传需要十几分钟,再考虑到公司的资源问题,果断放弃该方案。一提到大文件上传,我最先想到的就是各种网盘了,现在大家都喜欢将自己收藏的「小电影」上传到网盘进行保存。网盘一般都支持断点续传和文件秒传功能,减少......