亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

vue實現(xiàn)視頻上傳功能

 更新時間:2021年04月27日 11:33:53   作者:進(jìn)階__前端漫漫路  
這篇文章主要為大家詳細(xì)介紹了vue實現(xiàn)視頻上傳功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實例為大家分享了vue實現(xiàn)視頻上傳功能的具體代碼,供大家參考,具體內(nèi)容如下

環(huán)境:vue + TS 上傳視頻 + 上傳到阿里云
主要處理前端在vue下上傳視頻

使用的是阿里云的視頻點播服務(wù)

1、需要后臺去申請一個開發(fā)API,請求阿里云的接口訪問控制
2、有了開發(fā)視頻的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,
        // 上傳到點播的地域, 默認(rèn)值為'cn-shanghai',//eu-central-1,ap-southeast-1
        region: 'cn-shanghai',
        // 分片大小默認(rèn)1M,不能小于100K
        partSize: 1048576,
        // 并行上傳分片個數(shù),默認(rèn)5
        parallel: 5,
        // 網(wǎng)絡(luò)原因失敗時,重新上傳次數(shù),默認(rèn)為3
        retryCount: 3,
        // 網(wǎng)絡(luò)原因失敗時,重新上傳間隔時間,默認(rèn)為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')
        },
        // 文件上傳進(jìn)度,單位:字節(jié)
        onUploadProgress: function (uploadInfo, totalSize, loadedPercent) {
        },
        // 上傳憑證超時
        onUploadTokenExpired: function (uploadInfo) {
          console.log('onUploadTokenExpired')
        },
        // 全部文件上傳結(jié)束
        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('轉(zhuǎn)碼進(jìn)度', 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
    }
  })
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解vue.js數(shù)據(jù)傳遞以及數(shù)據(jù)分發(fā)slot

    詳解vue.js數(shù)據(jù)傳遞以及數(shù)據(jù)分發(fā)slot

    本篇文章給大家通過代碼實例分析了vue.js數(shù)據(jù)傳遞以及數(shù)據(jù)分發(fā)slot的相關(guān)知識,有這方面興趣的朋友參考下吧。
    2018-01-01
  • vue實現(xiàn)全選組件封裝實例詳解

    vue實現(xiàn)全選組件封裝實例詳解

    這篇文章主要介紹了vue?全選組件封裝,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-02-02
  • nuxt3中server routes的使用詳解

    nuxt3中server routes的使用詳解

    本文主要介紹了nuxt3中server routes的使用詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 前端項目中如何使用百度地圖api(含實例)

    前端項目中如何使用百度地圖api(含實例)

    當(dāng)我們遇到定位展示的時候會出現(xiàn)使用地圖展示的需求,下面這篇文章主要給大家介紹了關(guān)于前端項目中如何使用百度地圖api(含實例)的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-06-06
  • 解決vue3.0運(yùn)行項目warning Insert `·` prettier/prettier問題

    解決vue3.0運(yùn)行項目warning Insert `·` prettier/pret

    這篇文章主要介紹了解決vue3.0運(yùn)行項目warning Insert `·` prettier/prettier問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • vue攔截器Vue.http.interceptors.push使用詳解

    vue攔截器Vue.http.interceptors.push使用詳解

    這篇文章主要為大家詳細(xì)介紹了vue攔截器Vue.http.interceptors.push的使用方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • vue.js實現(xiàn)價格格式化的方法

    vue.js實現(xiàn)價格格式化的方法

    這里分享一個常用的價格格式化的一個方法,在電商的價格處理中非常的實用,具體實現(xiàn)代碼大家參考下本文
    2017-05-05
  • 徹底揭秘keep-alive原理(小結(jié))

    徹底揭秘keep-alive原理(小結(jié))

    這篇文章主要介紹了徹底揭秘keep-alive原理(小結(jié)),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 詳解vue中$router和$route的區(qū)別

    詳解vue中$router和$route的區(qū)別

    這篇文章主要介紹了vue中$router和$route的區(qū)別,對vue感興趣的同學(xué),一定要看下
    2021-05-05
  • 解決Vue keep-alive 調(diào)用 $destory() 頁面不再被緩存的情況

    解決Vue keep-alive 調(diào)用 $destory() 頁面不再被緩存的情況

    這篇文章主要介紹了解決Vue keep-alive 調(diào)用 $destory() 頁面不再被緩存的情況,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10

最新評論