Vueがビデオアップロード機能を実装

Vueがビデオアップロード機能を実装

この記事では、参考までに、ビデオアップロード機能を実現するためのVueの具体的なコードを紹介します。具体的な内容は次のとおりです。

環境: vue + TS動画アップロード + Alibaba Cloudへのアップロード 主にvue下のフロントエンド動画アップロードを扱います

Alibaba Cloudのビデオオンデマンドサービスを使用する

1. バックグラウンドで開発APIを申請し、Alibaba Cloudのインターフェースアクセス制御を要求する必要があります。
2. ビデオ開発用のトークンをフロントエンドに供給する
3. フロントエンドがAlibaba Cloudストレージを要求する

ビデオ.vue

<テンプレート>
  <div class="コンテナ">
    <el-card>
      <div スロット="ヘッダー">
        <div>コース:</div>
        <div>ステージ:</div>
        <div>授業時間:</div>
      </div>
      <el-form ラベル幅="40px">
        <el-form-item label="ビデオ">
          <入力
            ref="ビデオファイル"
            タイプ="ファイル"
          >
        </el-form-item>
        <el-form-item label="カバー">
          <入力
            ref="画像ファイル"
            タイプ="ファイル"
          />
        </el-form-item>
        <el-form-item>
          <el-ボタン
            タイプ="プライマリ"
            @click="認証アップロード"
          >アップロードを開始</el-button>
          <el-button>戻る</el-button>
        </el-form-item>
      </el-form>
    </el-card>
  </div>
</テンプレート>
<スクリプト>
/* eslint を無効にする */
'axios' から axios をインポートします
輸入 {
  aliyunImagUploadAddressAdnAuth、
  aliyunビデオアップロードアドレスAdnAuth、
  トランスコードビデオ、
  AliyunTransCodeパーセントを取得する
} '@/services/aliyun-oss' から

エクスポートデフォルト{
  データ () {
    戻る {
      アップローダー: null、
      ビデオID: null、
      画像URL: ''、
      ファイル名: ''
    }
  },
  作成された(){
    この.initUploader()
  },
  メソッド: {
    authUpload() {
      const videoFile = this.$refs['ビデオファイル'].files[0]
      this.uploader.addFile(ビデオファイル、null、null、null、'{"Vod":{}}')
      this.uploader.addFile(this.$refs['画像ファイル'].files[0], null, null, null, '{"Vod":{}}')
      this.fileName = ビデオファイル名
      this.uploader.startUpload()
    },
    アップローダーの初期化(){
      this.uploader = 新しいウィンドウ.AliyunUpload.Vod({
        // Ali アカウント ID には値が必要です。値は https://help.aliyun.com/knowledge_detail/37196.html から取得されます。
        ユーザーID: 1618139964448548、
        // VOD にアップロードするリージョン。デフォルト値は 'cn-shanghai'、//eu-central-1、ap-southeast-1
        地域: 'cn-shanghai'、
        // デフォルトのフラグメントサイズは 1M で、100K 未満にはできません
        パーツサイズ: 1048576,
        // 並行してアップロードするシャードの数。デフォルトは 5 です
        並列: 5,
        // ネットワーク障害が発生した場合の再アップロード回数、デフォルトは 3 回
        再試行回数: 3,
        // ネットワーク障害が発生した場合、再アップロード間隔はデフォルトで 2 秒です。retryDuration: 2、
        // アップロードを開始 onUploadstarted: async uploadInfo => {
          console.log('onUploadstarted', アップロード情報)
          uploadAuthInfo を null にします
          アップロード情報に画像が含まれている場合
            const {データ} = aliyunImagUploadAddressAdnAuth() を待機します
            this.imageUrl = data.data.imageURL
            アップロード認証情報 = data.data
          } それ以外 {
            const {データ} = aliyunVideoUploadAddressAdnAuth({
              ファイル名: uploadInfo.file.name
            })
            this.videoId = データ.data.videoId
            アップロード認証情報 = data.data
          }
          
          // コンソールログ('uploadAuthInfo', uploadAuthInfo)

          this.uploader.setUploadAuthAndAddress(
            アップロード情報、
            アップロードAuthInfo.アップロードAuth、
            アップロードAuthInfo.アップロードアドレス、
            アップロード認証情報.ビデオID || アップロード認証情報.画像ID
          )
        },
        // ファイルのアップロードが成功しました onUploadSucceed: function (uploadInfo) {
          console.log('onUploadSucceed', アップロード情報)
        },
        // ファイルのアップロードに失敗しました onUploadFailed: function (uploadInfo, code, message) {
          コンソールログ('onUploadFailed')
        },
        // ファイルアップロードの進行状況、単位: バイト onUploadProgress: function (uploadInfo, totalSize, loadedPercent) {
        },
        // アップロード認証情報のタイムアウト onUploadTokenExpired: function (uploadInfo) {
          コンソールログ('onUploadTokenExpired')
        },
        // アップロードされたすべてのファイルが完了した onUploadEnd: async uploadInfo => {
          コンソール.log(アップロード情報)
          コンソール.log({
            レッスンID: this.$route.query.lessonId、
            ファイルID: this.videoId、
            カバー画像URL: this.imageUrl、
            ファイル名: this.fileName
          })
          const {データ} = transCodeVideoを待機します({
            レッスンID: this.$route.query.lessonId、
            ファイルID: this.videoId、
            カバー画像URL: this.imageUrl、
            ファイル名: this.fileName
          })
          コンソール.log(データ)

          setInterval(非同期() => {
             const {データ} = getAliyunTransCodePercent(this.$route.query.lessonId) を待機します
             console.log('トランスコーディングの進行状況', データ)
          }, 3000)
        }
      })
    }
  }
}
</スクリプト>

aliyun-oss.ts、ストレージインターフェース

/**
 * Alibaba Cloudにアップロード*/

'@/utils/request' からリクエストをインポートします

エクスポートconst aliyunImagUploadAddressAdnAuth = () => {
  リクエストを返す({
    メソッド: 'GET'、
    url: '/boss/course/upload/aliyunImagUploadAddressAdnAuth.json'
  })
}

エクスポートconst aliyunVideoUploadAddressAdnAuth = (params: any) => {
  リクエストを返す({
    メソッド: 'GET'、
    url: '/boss/course/upload/aliyunVideoUploadAddressAdnAuth.json',
    パラメータ
  })
}

エクスポート const transCodeVideo = (データ: 任意) => {
  リクエストを返す({
    メソッド: 'POST'、
    url: '/boss/course/upload/aliyunTransCode.json',
    データ
  })
}

エクスポートconst getAliyunTransCodePercent = (lessonId: 文字列 | 数値) => {
  リクエストを返す({
    メソッド: 'GET'、
    url: '/boss/course/upload/aliyunTransCodePercent.json',
    パラメータ: {
      レッスンID
    }
  })
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Vue+flaskで動画合成機能を実現(ドラッグ&ドロップアップロード)
  • Vueはビデオとオーディオをアップロードするためのモバイル入力を実装します
  • Vue が Tencent Cloud オンデマンド動画アップロード機能の実装コードを実装
  • Vueはel-uploadを組み合わせてTencent Cloudの動画アップロード機能を実現
  • Vue のバックエンドにビデオや画像、画像とテキストをアップロードするためのソリューション
  • Vue vantUI はファイル (画像、ドキュメント、ビデオ、オーディオ) のアップロード (複数のファイル) を実装します。

<<:  MySQL データベースのホットスタンバイにおける問題点の分析

>>:  Linux でユーザーをグループに追加する 4 つの方法の概要

推薦する

数百万のデータボリュームに対する MySQL ページングクエリ方法とその最適化の提案

データベース SQL の最適化はよくある問題です。何百万ものデータ ボリュームに対してページング ク...

Vue3 (III) ウェブサイトホームページレイアウト開発

目次1. はじめに2. 実際の事例1. App.vueを変更する2. レイアウトを調整する3. ジャ...

要素の幅(高さ)の適応を実現するCSSおよびCSS3の柔軟なボックスモデル

1. CSSは左の固定幅と右の適応幅を実現します1. ポジショニング <!DOCTYPE ht...

MySQL テーブルスペースのリカバリに対する正しいアプローチについての簡単な説明

目次予備的注釈問題の再現データ削除の原則データの再利用どの操作がデータホールの原因になりますか?表領...

Javascript 非同期プログラミング: Promise を本当に理解していますか?

目次序文基本的な使い方文法エラー処理プロミスチェーン呼び出し非同期と待機よく使われる方法1. Pro...

IE をフリーズさせる HTML コード

任意のテキスト エディターを開き、次のコードをコピーして、たとえば SomeFilename.htm...

クロスオリジン画像リソース権限(CORS 対応画像)

HTML 仕様書では、画像の crossorigin 属性が導入されています。適切なヘッダー情報 ...

Vue で配列パラメータを渡すための get / delete メソッド

フロントエンドとバックエンドがやり取りする場合、get または delete を介してバックエンドに...

CSS フロントエンドの知識ポイントのまとめ(必読)

1. CSS の概念: (カスケーディング スタイル シート)利点: 1. コンテンツとプレゼンテ...

Centos8 で NIS ドメイン サービスをセットアップおよび構成するための詳細な手順

目次NIS の紹介ネットワーク環境: 1. 環境の準備(両方のノードが必要) 2.nisマスターサー...

Dockerで作成したコンテナを削除する方法

Dockerで作成したコンテナを削除する方法1. まず、docker -s -aコマンドを使用してす...

MySQL 8.0.22 winx64 のインストールと設定のグラフィックチュートリアル

mysql 8.0.22 winx64のインストールと設定のグラフィックチュートリアルは参考までに、...

Vue グローバル フィルターの概念、注意事項、基本的な使用方法

目次1. フィルターの概念1. グローバルフィルターのフォーマットをカスタマイズする2. フィルター...

デザイン理論:人の心を理解する方法

<br />かつて、仏印と東坡氏が仏教について雑談していたとき、東坡氏が突然こう言った。...