Vue implements video upload function

Vue implements video upload function

This article example shares the specific code of Vue to realize the video upload function for your reference. The specific content is as follows

Environment: vue + TS upload video + upload to Alibaba Cloud Mainly handles the front-end uploading video under vue

Using Alibaba Cloud's video on demand service

1. You need to apply for a development API in the background and request Alibaba Cloud's interface access control
2. With the token for developing videos, supply it to the front end
3. The front end requests Alibaba Cloud storage

video.vue

<template>
  <div class="container">
    <el-card>
      <div slot="header">
        <div>Course:</div>
        <div>Stage:</div>
        <div>Class time:</div>
      </div>
      <el-form label-width="40px">
        <el-form-item label="Video">
          <input
            ref="video-file"
            type="file"
          >
        </el-form-item>
        <el-form-item label="Cover">
          <input
            ref="image-file"
            type="file"
          />
        </el-form-item>
        <el-form-item>
          <el-button
            type="primary"
            @click="authUpload"
          >Start uploading</el-button>
          <el-button>Return</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({
        // Ali account ID, must have a value, the value comes from https://help.aliyun.com/knowledge_detail/37196.html
        userId: 1618139964448548,
        // The region for uploading to VOD, the default value is 'cn-shanghai', //eu-central-1, ap-southeast-1
        region: 'cn-shanghai',
        // The default fragment size is 1M and cannot be less than 100K
        partSize: 1048576,
        // The number of shards to upload in parallel, the default is 5
        parallel: 5,
        // When network failure occurs, re-upload times, default is 3
        retryCount: 3,
        // When the network fails, the re-upload interval is 2 seconds by default. retryDuration: 2,
        // Start uploading 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
          )
        },
        // File upload successful onUploadSucceed: function (uploadInfo) {
          console.log('onUploadSucceed', uploadInfo)
        },
        // File upload failed onUploadFailed: function (uploadInfo, code, message) {
          console.log('onUploadFailed')
        },
        // File upload progress, unit: bytes onUploadProgress: function (uploadInfo, totalSize, loadedPercent) {
        },
        // Upload credential timeout onUploadTokenExpired: function (uploadInfo) {
          console.log('onUploadTokenExpired')
        },
        // All files uploaded are finished 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('transcoding progress', data)
          }, 3000)
        }
      })
    }
  }
}
</script>

aliyun-oss.ts , storage interface

/**
 * Upload to Alibaba Cloud*/

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 above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • Vue+flask realizes video synthesis function (drag and drop upload)
  • Vue implements mobile input to upload video and audio
  • Vue implements Tencent Cloud on-demand video upload function implementation code
  • Vue combines el-upload to realize Tencent Cloud video upload function
  • Solution for uploading videos or pictures or pictures and text to the backend in Vue
  • Vue vantUI implements file (picture, document, video, audio) upload (multiple files)

<<:  Analysis of Difficulties in Hot Standby of MySQL Database

>>:  Summary of 4 ways to add users to groups in Linux

Recommend

Vue Basics Listener Detailed Explanation

Table of contents What is a listener in vue Usage...

MySQL 8.0.23 Major Updates (New Features)

Author: Guan Changlong is a DBA in the Delivery S...

Tutorial on installing GreasyFork js script on mobile phone

Table of contents Preface 1. Iceraven Browser (Fi...

A brief discussion on the design of Tomcat multi-layer container

Table of contents Container Hierarchy The process...

SQL GROUP BY detailed explanation and simple example

The GROUP BY statement is used in conjunction wit...

javascript implements web version of pinball game

The web pinball game implemented using javeScript...

Vue uses Echarts to implement a three-dimensional bar chart

This article shares the specific code of Vue usin...

A brief discussion on the implementation principle of Webpack4 plugins

Table of contents Preface know Practice makes per...

How to configure CDN scheduling using Nginx_geo module

Introducing the Geo module of Nginx The geo direc...

How to hide a certain text in HTML?

Text hiding code, hide a certain text in HTML Copy...

Detailed explanation of the order of JS object traversal

Some of you may have heard that the order of trav...

Summary of practical experience of HTML knowledge points

1. The table tag is table, tr is row, td is cell, ...