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

推薦する

スローモーションアニメーション効果を実現するJavaScript

この記事では、スローモーションアニメーション効果を実現するためのJavaScriptの具体的なコード...

2時間のDocker入門チュートリアル

目次1.0 はじめに2.0 Dockerのインストール3.0基本的なDockerコマンド4.0 Do...

vscode を使用したリモート Linux 開発の実装

過去に別れを告げるvscode にリモート SSH が導入される前は、Linux サーバー開発者の多...

Ubuntu システムに Theano と Keras をインストールする方法

注: システムは Ubuntu 14.04LTS、32 ビット オペレーティング システムです。Py...

Dockerfileを使用してDockerイメージを構築する手順

Dockerfile は、命令を含むテキスト ファイルです。各命令はレイヤーを構築するため、各命令の...

MySQL のソートとページング (order by と limit) と既存の落とし穴

並べ替えクエリ (order by)電子商取引の場合: 今日完了したすべての注文を表示し、取引金額に...

MySQL はデータベースを動的に更新します スクリプト例の説明

具体的なupgradeスクリプトは次のとおりです。インデックスを動的に削除する アップグレードが存在...

Vueベースのカスタムコンポーネントを実装してアイコンを導入する

序文プロジェクト開発では、アイコンを使用する方法はたくさんあります。iconfont で適切なアイコ...

Centos8 システムの VMware インストール チュートリアル図 (コマンド ライン モード)

目次1. ソフトウェアとシステムイメージ2. 仮想マシンを作成する3. CentOS8をインストール...

問題におけるJS演算子の調査

問題は、誰もが「メモリ リーク」について知っていることです。一般的なシナリオはいくつかあります。クロ...

Centos7でglibcをアップグレードするとシステム異常(起動できない)になる場合の解決方法

目次問題の原因:解決:解決:私は Centos7 を使用しています (理論的にはこの方法は Cent...

mysql order by in の文字順序の詳細な説明 (推奨)

//MySQL ステートメント SELECT * FROM `MyTable` WHERE `id...

HarborをベースにしたDocker専用倉庫の構築方法

目次1. ハーバーの紹介1. ハーバーが民間倉庫を建設3. 港湾の維持管理4. Harborユーザー...

JavaScript配列の重複排除のいくつかの方法についての詳細な説明

目次1.重複排除を設定する2. 重複を削除するには、2 回の for ループを使用します。 3. i...

Docker ベースの ELK を素早く構築する方法

[概要] この記事では、自作の Docker プラットフォームをベースに完全な ELK システムを素...