最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

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

1、需要后臺(tái)去申請(qǐng)一個(gè)開發(fā)API,請(qǐng)求阿里云的接口訪問控制
2、有了開發(fā)視頻的token,供給前端
3、前端去請(qǐng)求阿里云存儲(chǔ)

video.vue

<template>
  <div class="container">
    <el-card>
      <div slot="header">
        <div>課程:</div>
        <div>階段:</div>
        <div>課時(shí):</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({
        // 阿里賬號(hào)ID,必須有值 ,值的來(lái)源https://help.aliyun.com/knowledge_detail/37196.html
        userId: 1618139964448548,
        // 上傳到點(diǎn)播的地域, 默認(rèn)值為'cn-shanghai',//eu-central-1,ap-southeast-1
        region: 'cn-shanghai',
        // 分片大小默認(rèn)1M,不能小于100K
        partSize: 1048576,
        // 并行上傳分片個(gè)數(shù),默認(rèn)5
        parallel: 5,
        // 網(wǎng)絡(luò)原因失敗時(shí),重新上傳次數(shù),默認(rèn)為3
        retryCount: 3,
        // 網(wǎng)絡(luò)原因失敗時(shí),重新上傳間隔時(shí)間,默認(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) {
        },
        // 上傳憑證超時(shí)
        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
    }
  })
}

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

相關(guān)文章

  • vue2.x 父組件監(jiān)聽子組件事件并傳回信息的方法

    vue2.x 父組件監(jiān)聽子組件事件并傳回信息的方法

    本篇文章主要介紹了vue2.x 父組件監(jiān)聽子組件事件并傳回信息的方法,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-07-07
  • 解決Vue中的生命周期beforeDestory不觸發(fā)的問題

    解決Vue中的生命周期beforeDestory不觸發(fā)的問題

    這篇文章主要介紹了解決Vue中的生命周期beforeDestory不觸發(fā)的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • vue3 element-plus二次封裝組件系列之伸縮菜單制作

    vue3 element-plus二次封裝組件系列之伸縮菜單制作

    這篇文章主要介紹了vue3 element-plus二次封裝組件系列之伸縮菜單制作,是基于vue3 vite element-plus搭建的,值的注意的時(shí)候,里面的圖標(biāo)組件是經(jīng)過(guò)處理的,結(jié)合實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • vant中field組件label屬性兩端對(duì)齊問題及解決

    vant中field組件label屬性兩端對(duì)齊問題及解決

    這篇文章主要介紹了vant中field組件label屬性兩端對(duì)齊問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • Vue-cli3多頁(yè)面配置詳解

    Vue-cli3多頁(yè)面配置詳解

    這篇文章主要介紹了Vue-cli3多頁(yè)面配置詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-03-03
  • vue前端框架vueuse的useScroll函數(shù)使用源碼分析

    vue前端框架vueuse的useScroll函數(shù)使用源碼分析

    這篇文章主要為大家介紹了vueuse的useScroll函數(shù)源碼分析詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Vue的異步組件加載的實(shí)現(xiàn)方法小結(jié)

    Vue的異步組件加載的實(shí)現(xiàn)方法小結(jié)

    在 Vue 中,異步組件是指那些在需要時(shí)才會(huì)被加載的組件,與傳統(tǒng)的靜態(tài)組件不同,異步組件通過(guò)動(dòng)態(tài)加載的方式,可以有效地減少初始加載的資源和時(shí)間,在 Vue 中實(shí)現(xiàn)異步組件加載非常簡(jiǎn)單,開發(fā)者有多種方法可以做到,本文給大家介紹了一些常用的實(shí)現(xiàn)方法
    2024-11-11
  • vue使用websocket及封裝過(guò)程

    vue使用websocket及封裝過(guò)程

    這篇文章主要介紹了vue使用websocket及封裝過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10
  • 前端使用vue點(diǎn)擊上傳文件傳送給后端并進(jìn)行文件接收的方法

    前端使用vue點(diǎn)擊上傳文件傳送給后端并進(jìn)行文件接收的方法

    這篇文章主要介紹了如何在前端和后端實(shí)現(xiàn)文件傳輸,前端使用Vue.js發(fā)送文件,后端使用Java接收文件并處理,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • Vue中封裝input組件的實(shí)例詳解

    Vue中封裝input組件的實(shí)例詳解

    這篇文章主要介紹了Vue中封裝input組件的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-10-10

最新評(píng)論

丰顺县| 阿坝| 仪陇县| 甘南县| 融水| 德阳市| 镇江市| 通海县| 开江县| 当涂县| 长沙市| 财经| 任丘市| 洛扎县| 曲沃县| 正蓝旗| 安阳市| 巴林右旗| 凌海市| 门源| 乐陵市| 平凉市| 溧阳市| 安西县| 浙江省| 互助| 抚宁县| 岳西县| 武汉市| 定襄县| 三台县| 宜丰县| 铜山县| 阿鲁科尔沁旗| 稻城县| 孝感市| 丰台区| 海兴县| 阳原县| 宜章县| 阿克|