すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo VOD:JavaScript 用アップロード SDK

最終更新日:Nov 09, 2025

このトピックでは、JavaScript 用アップロード SDK を使用してローカルメディアファイルを ApsaraVideo VOD にアップロードする方法について説明します。

ブラウザの要件

ブラウザ

サポート対象

バージョン

IE

✔️

Internet Explorer 10 以降

Microsoft Edge

✔️

すべて

Chrome

✔️

主流のブラウザバージョン

Firefox

✔️

Safari

✔️

Android のデフォルトブラウザ

✔️

iOS のデフォルトブラウザ

✔️

Windows Phone のデフォルトブラウザ

✔️

機能の説明

JavaScript 用アップロード SDK を使用してアップロードできるのは、音声、動画、および画像ファイルのみです。補助メディアアセットのアップロードには使用できません。

SDK とデモのダウンロード

統合方法

アップロード SDK は OSS SDK に依存します。window.OSS に有効な値を指定する必要があります。そうしないと、ReferenceError: OSS is not defined が報告される可能性があります。

(推奨) HTML コードで <script> を使用してインポートする

<!--  es6-promise は Internet Explorer に必要です。Internet Explorer 10 以降がサポートされています。 -->
  <script src="../lib/es6-promise.min.js"></script>
  <script src="../lib/aliyun-oss-sdk-6.17.1.min.js"></script>
  <script src="../aliyun-upload-sdk-1.5.7.min.js"></script>

モジュールを使用してインポートする

window.OSS の値として OSS モジュールの内容を手動で指定できます。サンプルコード:

説明

HTML コードで <script> を使用してすでにファイルを参照している場合は、再度参照する必要はありません。

import OSS from '../lib/aliyun-upload-sdk/lib/aliyun-oss-sdk-6.17.1.min'
window.OSS = OSS;
import '../lib/aliyun-upload-sdk/aliyun-upload-sdk-1.5.7.min'

基本設定

アップロードインスタンスの初期化

  • SDK インスタンスを初期化するときは、アップローダーを識別するために userId パラメーターを指定する必要があります。値は Alibaba Cloud アカウント ID またはカスタムユーザー ID にすることができます。ID は Alibaba Cloud アカウントセンターで表示できます。userId パラメーターを指定しないか、このパラメーターを null に設定すると、エラーが報告されます。

  • region パラメーターは、ApsaraVideo VOD でサポートされているリージョン ID に基づいて指定する必要があります。

var uploader = new AliyunUpload.Vod({
  // 必須。アップローダーの ID。値は Alibaba Cloud アカウント ID またはカスタムユーザー ID にすることができます。ID は Alibaba Cloud アカウントセンター (https://account-console.alibabacloud.com/) で表示できます。
  userId: "122",
  // ファイルをアップロードするリージョン。デフォルト値: cn-shanghai。
  //eu-central-1, ap-southeast-1
  region: "",
  // マルチパートアップロードにおける各パートのサイズ。単位: バイト。サイズは 100 KB (100 × 1024) 未満にすることはできません。デフォルトサイズ: 1 MB (1 × 1024 × 1024)。
  partSize: 1048576,
  // 並行してアップロードできるパートの最大数。デフォルト値: 5。
  parallel: 5,
  // ネットワークエラーが発生した場合にシステムがアップロードをリトライする最大回数。デフォルト値: 3。
  retryCount: 3,
  // ネットワークエラーが発生した場合にシステムがアップロードをリトライする間隔。デフォルト値: 2。単位: 秒。
  retryDuration: 2,
  // アップロードが開始されます。
  onUploadstarted: function (uploadInfo) {},
  // アップロードは成功です。
  onUploadSucceed: function (uploadInfo) {},
  // アップロードは失敗です。
  onUploadFailed: function (uploadInfo, code, message) {},
  // アップロードの進行状況。単位: バイト。
  onUploadProgress: function (uploadInfo, totalSize, loadedPercent) {},
  // アップロード資格情報または STS トークンが期限切れです。
  onUploadTokenExpired: function (uploadInfo) {},
  // すべてのファイルがアップロードされました。
  onUploadEnd: function (uploadInfo) {},
});

資格情報の設定

続行する前に、クライアントの全体的なアップロードプロセスを理解し、対応する権限付与方法に基づいて権限付与サービスをデプロイしてください:

  1. 方法 1: アップロード URL と資格情報を使用する場合は、権限付与サービスからアップロード URL と資格情報を取得します

  2. 方法 2: STS トークンを使用する場合は、権限付与サービスからSTS トークンを取得します

返された権限付与情報は onUploadstarted コールバックで設定する必要があります。資格情報が無効になると、onUploadTokenExpired コールバックが有効期限切れに応答します。この場合、資格情報更新操作を呼び出して新しい資格情報を取得する必要があります。

方法 1: アップロード URL と資格情報

アップロード URL と資格情報を設定するには、setUploadAuthAndAddress メソッドを呼び出します。資格情報が期限切れになると、システムは onUploadTokenExpired コールバックをトリガーします。この場合、resumeUploadWithAuth メソッドを呼び出して新しいアップロード資格情報を設定し、アップロードを再開する必要があります。

// アップロードが開始されます。
onUploadstarted: function (uploadInfo) {
  let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
  axios.get(refreshUrl).then(({data}) => {
    let uploadAuth = data.UploadAuth
    let uploadAddress = data.UploadAddress
    let videoId = data.VideoId
    uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)
  })
},
// アップロード資格情報が期限切れです。
onUploadTokenExpired: function (uploadInfo) {
  // 方法 1 (UploadAuth) を使用して大きなファイルをアップロードするとタイムアウトした場合、
  // uploadInfo.videoId に基づいて RefreshUploadVideo 操作を呼び出し、UploadAuth の値を再取得します。
  // 次に、resumeUploadWithAuth メソッドを呼び出します。この例では、resumeUploadWithAuth はテストメソッドであるため、UploadAuth の値は直接取得されます。
  let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
  axios.get(refreshUrl).then(({data}) => {
    let uploadAuth = data.UploadAuth
    uploader.resumeUploadWithAuth(uploadAuth)
    console.log('upload expired and resume upload with uploadauth ' + uploadAuth)
  })
  self.statusText = 'The upload times out...'
},

メソッドの説明

uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress, videoId)
uploader.resumeUploadWithAuth(uploadAuth)

パラメーター

説明

uploadInfo

onUploadstarted コールバックの最初のパラメーターから値を取得できます。

uploadAuth

CreateUploadVideo 操作によって返されるアップロード資格情報。

uploadAddress

CreateUploadVideo 操作によって返されるアップロード URL。

videoId

CreateUploadVideo 操作によって返される音声または動画の ID。

方法 2: STS トークン

STS トークンを設定するには、setSTSToken メソッドを呼び出します。トークンが無効になると、システムは onUploadTokenExpired コールバックをトリガーします。この場合、resumeUploadWithSTSToken メソッドを呼び出して新しい STS トークンを設定し、アップロードを再開する必要があります。

 /*コールバックメソッド - アップロードが開始されます。*/
 onUploadstarted: function (uploadInfo) {
    let stsUrl = "***.***.stsUrl" /*setSTSToken メソッドを使用して STS トークンを取得します。*/
    axios.get(stsUrl).then(({data}) => {
          var info = data.SecurityTokenInfo
          uploader.setSTSToken(uploadInfo, info.AccessKeyId, info.AccessKeySecret, info.SecretToken);
     })
 },
/*コールバックメソッド - 資格情報がタイムアウトします。*/
 onUploadTokenExpired: function (uploadInfo) { 
     let stsUrl = "***.***.stsUrl"  /*resumeUploadWithSTSToken メソッドを使用して STS トークンを更新します。*/
     axios.get(stsUrl).then(({data}) => {
         var info = data.SecurityTokenInfo  
         uploader.resumeUploadWithSTSToken(info.AccessKeyId, info.AccessKeySecret, info.SecretToken);      
     })
 },

メソッドの説明

uploader.setSTSToken(uploadInfo, accessKeyId, accessKeySecret, secretToken)
uploader.resumeUploadWithSTSToken(accessKeyId, accessKeySecret, secretToken)

パラメーター

説明

uploadInfo

onUploadstarted コールバックの最初のパラメーターから値を取得できます。

accessKeyId

STS トークンの AccessKeyId フィールド。

accessKeySecret

STS トークンの AccessKeySecret フィールド。

secretToken

STS トークンの SecretToken フィールド。

ファイルの追加

次のコードを使用して、<input type="file" /> フォームアイテムの change イベントをリッスンし、ファイルを uploader のアップロードリストに追加します。

ネイティブ JavaScript

 <form action="">
   <input type="file" name="file" id="files" multiple/>
 </form>
 
 <script>
   userData = '';
   document.getElementById("files")
    .addEventListener('change', function (event) {
      for(var i=0; i<event.target.files.length; i++) {
        // ロジックコード。
        uploader.addFile(event.target.files[i],null,null,null,null)
      }
    });
 </script>

Vue

 <template>
  <input type="file" id="fileUpload" @change="fileChange($event)">
 </template>

<script>
  export default {
    data () {
      return {
        file: null,
      }
    },
    methods: {
      fileChange (e) {
        this.file = e.target.files[0]
        if (!this.file) {
          alert("アップロードするファイルを選択してください。")
          return
        }
        var Title = this.file.name
        var userData = '{"Vod":{}}'
        if (this.uploader) {
          this.uploader.stopUpload()
        }
        // アップローダーを初期化します。
        this.uploader = this.createUploader() 
        this.uploader.addFile(this.file, null, null, null, userData)
      },
    }
  }
</script>

メソッドの説明

uploader.addFile(file,endpoint,bucket,object,paramData)

パラメーター

必須

タイプ

説明

file

はい

ファイル

アップロードするメディアファイル。

endpoint

いいえ

文字列

OSS エンドポイント。null を指定した場合、実際の値は AppServer によって決定されます。

bucket

いいえ

文字列

ファイルをアップロードするバケット。null を指定した場合、実際の値は AppServer によって決定されます。

object

いいえ

文字列

ファイルをアップロードするオブジェクト。null を指定した場合、実際の値は AppServer によって決定されます。

paramData

いいえ

文字列

アップロードする動画または音声ファイルに関する情報 (タイトル、説明、トランスコード設定、コールバック設定など)。STS トークンを使用して動画または音声ファイルを ApsaraVideo VOD にアップロードする場合、paramData を指定できます。

paramData パラメーターの値は、 '{"Vod":{}}' のような JSON 文字列です。リクエストで Vod を指定する必要があります。paramData パラメーターでサポートされているパラメーターを Vod の下にネストできます。CreateUploadVideo - 音声または動画のアップロードアドレスと資格情報を取得する または CreateUploadImage - 画像のアップロードアドレスと資格情報を取得する 操作のリクエストパラメーターをネストできます。

アップロードの開始

uploader.startUpload();
  1. ファイルのアップロードが開始されると、onUploadProgress コールバックが呼び出され、アップロードの進行状況が同期されます。

  2. ファイルのアップロードが成功すると、onUploadSucceed コールバックが呼び出され、アップロード結果が返されます。

アップロードの進行状況の表示

// ファイルのアップロードの進行状況。単位: バイト。この関数を使用してアップロードの進行状況を取得し、ページにアップロードの進行状況を表示できます。
onUploadProgress: function (uploadInfo, totalSize, progress) {
  console.log("onUploadProgress:file:" + uploadInfo.file.name + ", fileSize:" + totalSize + ", percent:" + Math.ceil(progress * 100) + "%")
  let progressPercent = Math.ceil(progress * 100)
  self.authProgress = progressPercent
  self.statusText = 'The upload is ongoing...'
},

アップロード結果の取得

// アップロードは成功です。
onUploadSucceed: function (uploadInfo) {
  console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
  self.statusText = 'The upload is successful!'
},
// アップロードは失敗です。
onUploadFailed: function (uploadInfo, code, message) {
  console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message)
  self.statusText = 'The upload fails!'
},
  • 動画がアップロードされた後、videoId パラメーターを使用して再生 URL を取得し、動画を再生できます。詳細については、「再生資格情報の取得」をご参照ください。

  • 画像がアップロードされても imageUrl は自動的に返されません。画像 URL を取得するには、コールバックを設定できます。

高度な機能

アップロードアクセラレーションの使用

ギガバイトまたはテラバイト単位の大きなファイルや、中国本土のリージョンからシンガポールストレージリージョンのストレージの場所への動画のアップロードなど、リージョンをまたいで動画をアップロードするには、アップロードアクセラレーション機能を有効にできます。

アップロードアクセラレーション機能を有効にするには、チケットを送信してください。[Alibaba Cloud アカウント UID] と、アップロードアクセラレーションを有効にする [ストレージの場所] を提供する必要があります。

方法 1: アップロード URL と資格情報

このメソッドを使用してファイルをアップロードする場合は、CreateUploadVideo - 音声または動画のアップロードアドレスと資格情報を取得する 操作を呼び出し、UserData パラメーターにキーと値のペアを指定してアクセラレーション設定を構成します。サンプルコード:

UserData={
  "AccelerateConfig": {
    "Type": "oss",
    "Domain": "https://oss-accelerate.aliyuncs.com"
  }
}

方法 2: STS トークン

このメソッドを使用してファイルをアップロードする場合は、addFile メソッドを呼び出し、UserData プロパティを paramData パラメーターに追加してから、アップロードコンテンツを設定します。サンプルコード:

uploader.addFile(file,null,null,null,'{"Vod":{"UserData":{"AccelerateConfig":{"Type":"oss","Domain":"https://oss-accelerate.aliyuncs.com"}}}}');

UserData の説明

名前

タイプ

必須

説明

userData

string

いいえ

コールバック設定やアップロードアクセラレーション設定などのカスタム設定。値は JSON 文字列である必要があります。詳細については、をご参照ください。

次の表にパラメーターを示します。

名前

タイプ

説明

Type

string

アップロードアクセラレーションを有効にするタイプ。OSS のみがサポートされています。

Domain

string

バケットの高速化ドメイン名。デフォルトでは、HTTPS が使用されます。

説明

アップロードアクセラレーションを有効にした後に割り当てられた高速化エンドポイント (vod-*******.oss-accelerate.aliyuncs.com など) が使用されます。

UserData の設定方法の詳細については、「リクエストパラメーター」をご参照ください。

アップロードの停止

説明

stopUpload は、ファイルがアップロード中の場合にのみ呼び出すことができます。それ以外の場合、stopUpload は効果がありません。

uploader.stopUpload();

キュー管理

次のメソッドを呼び出して、アップロード済みまたはアップロード中のファイルを管理できます:

  • アップロードリストのクエリ

    返されるデータには、addFile を呼び出してアップロードされたファイルに関する情報が含まれます。「file:」は、リスト内の各要素がファイルであることを示します。トラバースすることで、管理したいファイルのインデックスを取得できます。

    var list = uploader.listFiles();
    for (var i=0; i<list.length; i++) {
        console.log("file:" + list[i].file.name);
    }
  • アップロードするファイルの削除

    uploader.deleteFile(index);//削除するファイルのインデックス。インデックスは listFiles 操作によって返されます。
  • 単一ファイルのアップロードのキャンセル

    説明
    • cancelFile を呼び出すと、コンソールに oss is cancel as error メッセージが表示されます。これにより、アップロードされたパートがストレージ領域を占有するのを防ぎ、不要なコストを節約できます。

    • キャンセルされたアップロードを再開するには、アップロードを再開する前に uploader.resumeFile(index); を使用してファイルを復元する必要があります。

    uploader.cancelFile(index);
  • 単一ファイルのアップロードの再開

    uploader.resumeFile(index);
  • アップロードリストのクリア

    uploader.cleanList();

再開可能なアップロードの実行

ファイルのアップロード中に、ページの強制シャットダウンやブラウザのクラッシュなどのエラーが発生し、ファイルを再アップロードすると、JavaScript 用アップロード SDK はブレークポイントからアップロードを再開し、onUploadstarted コールバックからアップロード資格情報を取得します。方法 1: アップロード URL と資格情報を使用してファイルをアップロードする場合、videoId パラメーターの値に基づいて ApsaraVideo VOD API 操作を呼び出し、ブレークポイント情報を取得できます。サンプルコード:

// アップロードが開始されます。
onUploadstarted: function (uploadInfo) {
  // UploadAuth を使用してファイルをアップロードする場合は、uploader.setUploadAuthAndAddress メソッドを呼び出します。
  // UploadAuth を使用してファイルをアップロードする場合は、uploadInfo.videoId に値があるかどうかに基づいて、異なる ApsaraVideo VOD API 操作を呼び出して uploadauth と uploadAddress を取得します。
  // uploadInfo.videoId に値がある場合は、RefreshUploadVideo 操作を呼び出します。それ以外の場合は、CreateUploadVideo 操作を呼び出します。
  // 次の情報に注意してください: これはテストデモであるため、操作は UploadAuth を取得するために直接呼び出されます。実際のシナリオでは、uploadInfo.videoId に値があるかどうかに基づいて、特定の操作を呼び出して UploadAuth を取得する必要があります。
  // uploadInfo.videoId が存在する場合は、RefreshUploadVideo 操作を呼び出します。
  // uploadInfo.videoId が存在しない場合は、CreateUploadVideo 操作を呼び出します。
  if (!uploadInfo.videoId) {
    let createUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/CreateUploadVideo?Title=testvod1&FileName=aa.mp4&BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&VideoId=5bfcc7864fc14b96972842172207c9e6'
    axios.get(createUrl).then(({data}) => {
      let uploadAuth = data.UploadAuth
      let uploadAddress = data.UploadAddress
      let videoId = data.VideoId
      uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)                
    })
    self.statusText = 'The file upload is started...'
    console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
  } else {
    // ブレークポイント情報を表示します。
    console.log(uploader.getCheckpoint(uploadInfo.file));
    // videoId パラメーターに値がある場合、動画のアップロードは失敗します。システムはブレークポイントからアップロードを再開します。videoId の値に基づいてアップロード資格情報を更新する必要があります。
    let refreshUrl = 'https://demo-vod.cn-shanghai.aliyuncs.com/voddemo/RefreshUploadVideo?BusinessType=vodai&TerminalType=pc&DeviceModel=iPhone9,2&UUID=59ECA-4193-4695-94DD-7E1247288&AppVersion=1.0.0&Title=haha1&FileName=xxx.mp4&VideoId=' + uploadInfo.videoId
    axios.get(refreshUrl).then(({data}) => {
      let uploadAuth = data.UploadAuth
      let uploadAddress = data.UploadAddress
      let videoId = data.VideoId
      uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress,videoId)
    })
  }
}

次のメソッドを使用してブレークポイント情報を取得できます:

 uploader.getCheckpoint(file);

例外処理

JavaScript 用アップロード SDK の使用中に例外が発生した場合は、エラーコードを参照して原因を特定できます。詳細については、「クライアントエラーコード」をご参照ください。