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

Detailed explanation of MySQL string concatenation function GROUP_CONCAT

In the previous article, I wrote a cross-table up...

How to specify parameter variables externally in docker

This article mainly introduces how to specify par...

MySQL 5.7.19 (tar.gz) installation graphic tutorial under Linux

The first tutorial for installing MySQL-5.7.19 ve...

Detailed explanation of Mybatis special character processing

Preface: Mybatis special character processing, pr...

Summary of 10 must-see JavaScript interview questions (recommended)

1.This points to 1. Who calls whom? example: func...

React realizes secondary linkage effect (staircase effect)

This article shares the specific code of React to...

Linux unlink function and how to delete files

1. unlink function For hard links, unlink is used...

Analysis of two implementation methods for adding static routing in Linux

Command to add a route: 1.Route add route add -ne...

Alibaba Cloud applies for a free SSL certificate (https) from Cloud Shield

Because the project needs to use https service, I...

Let IE6, IE7, IE8 support CSS3 rounded corners and shadow styles

I want to make a page using CSS3 rounded corners ...