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

推薦する

Linux xargsコマンドの使用

1. 機能: xargs は、stdin 内のスペースまたは改行で区切られたデータをスペースで区切ら...

select @@session.tx_read_only が DB に大量に出現するのはなぜですか?

問題を見つける上位の SQL ステートメントを取得すると、DB が大量のselect @@sessi...

CSSポジションの5つの異なる値の使い方の詳細な説明

位置プロパティposition プロパティは、要素に使用する配置方法のタイプ (静的、相対的、固定、...

Docker コンテナのカスタム ホストのネットワーク アクセス操作

docker-compose.yml に extra_hosts キーワードを追加すると、コンテナの...

ウェブサイトのパフォーマンス: 画像とCookieの最適化、モバイルアプリケーションの最適化

前のセクションでは、コンテンツ、サーバー、JavaScript、CSS など、Web サイトのパフォ...

JavaScript 関数構文の説明

目次1. 通常の機能2. 矢印関数3. データパケットJSON 4. オブジェクト5. 約束6. 非...

1つの記事でJavaScript DOM操作の基本を学ぶ

DOM の概念DOM: ドキュメント オブジェクト モデル: ドキュメント オブジェクト モデルは、...

CentOS7 systemdにカスタムシステムサービスを追加する方法

システムド: CentOS 7のサービスsystemctlスクリプトは、/usr/lib/syste...

フォームにファイルをアップロードした後にアクションを保存するよう促す理由と解決策

jsonデータはhtml形式で返される必要がありますつまり、 response.setContent...

CSS3 Flex エラスティックレイアウトのサンプルコードの詳細な説明

1. 基本概念 //任意のコンテナを Flex レイアウトとして指定できます。 。箱{ ディスプレイ...

MySQLデータベース設計:Pythonを使ったスキーマ操作方法の詳しい解説

矢が放たれる前に、弓は矢にささやきました。「お前の自由は私のものだ。」スキーマは矢のようなもので、弓...

MySQL 1130例外、リモートログインできない解決策

目次質問: 1. リモートログイン権限を有効にする: 2. MySQLの権限を更新します。 3. テ...

JS 面接の質問: forEach はループから抜け出すことができますか?

この質問をされたとき、私は無知で頭が真っ白になりました。もちろん、正しく答えられませんでした。私はず...

Docker+nextcloudで個人用クラウドストレージシステムを構築

1. Dockerのインストールと起動 yum で epel-release をインストールします ...

Centos7.2 で mysql5.7 データベースをインストールするための詳細な手順

サーバー上の mysql はバージョン 8.0.12 でインストールされており、ローカルのものはバー...