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 つの方法の概要

推薦する

ボタンのタイプが送信として指定されていません。ボタンをクリックしても、指定された URL にジャンプしません。

現在、プロジェクトの要件により、フォームの送信を制御し、送信前にデータを検証および処理するために j...

CentOS 7.5 に Docker をインストールする詳細なチュートリアル

Docker入門Docker は、アプリケーションをより速く配信するのに役立つオープンソースのコンテ...

Linux のバックグラウンドで & と nohup を使用する方法

ターミナルやコンソールで作業しているときは、メールを読むなど、もっと重要な作業があるかもしれないので...

MySQL データ型 DECIMAL の詳細な分析

序文:金額の保存など、小数点数を保存し、精度要件がある場合、通常は DECIMAL フィールド タイ...

MySQL の基本ステートメントを最適化するための 10 の原則の概要

序文データベースの応用において、プログラマーは継続的な実践を通じて多くの経験を積んできました。これら...

ZabbixはPSK共有キーを使用してサーバーとエージェント間の通信を暗号化します。

Zabbix バージョン 3.0 以降、Zabbix サーバー、Zabbix プロキシ、Zabbi...

MySQL で日付時刻データを取得し、その後に .0 を追加する方法

MySQL のデータ型は datetime です。データベースに保存されているデータは 2015-0...

MySQL コマンドライン操作中のエンコードの問題の詳細な説明

1. MySQLデータベースのエンコーディングを確認する mysql -u ユーザー名 -p パスワ...

Vueは左上と右上のスライドナビゲーションを実装します

ナビゲーションなどは日々の開発でよく使うので、記録として記事を書きます。ナビゲーションは終了/開始位...

MySQL スロークエリログの詳細な理解

目次スロークエリログとは何ですか?スロークエリを有効にする方法ログ分析ツール mysqldumpsh...

MySQL内部一時テーブルの具体的な使用法

目次連合テーブルの初期化ステートメントの実行連合の結果ユニオンオールグループ化十分なメモリステートメ...

Vue検証コードコンポーネントの使い方の詳しい説明

この記事の例では、vue検証コードコンポーネントで使用される具体的な実装コードを参考までに共有してい...

Linuxにpipパッケージをインストールする方法

1. システムの Python バージョンに応じて、pip インストール パッケージをダウンロードし...

CSS での配置の使用方法の詳細な研究 (要約)

CSS における位置指定の概要position属性は英語で位置を意味し、 CSSでの主な機能は要素...

2 級コンピュータ試験のための MySQL の知識ポイントとよく使用される MYSQL コマンド

2級コンピュータ試験のMySQL知識ポイントの基礎、一般的なMYSQLコマンドは次のとおりです。よく...