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

ApsaraVideo VOD:JavaScript アップロード SDK

最終更新日:Sep 16, 2026

JavaScript アップロード SDK を使用して、メディアファイルを ApsaraVideo VOD にアップロードします。

ブラウザ要件

ブラウザ

対応

バージョン

IE

✔️

Internet Explorer 10 以降

Microsoft Edge

✔️

すべて

Chrome

✔️

主要なバージョン

Firefox

✔️

Safari

✔️

Android 標準ブラウザ

✔️

iOS 標準ブラウザ

✔️

Windows Phone 標準ブラウザ

✔️

機能説明

JavaScript アップロード SDK は、音声、動画、画像のアップロードのみをサポートします。補助メディアアセットはサポートされていません。

SDK とデモのダウンロード

実装方法

JavaScript アップロード SDK は OSS SDK に依存します。 window.OSS を有効な値に設定してください。 設定しないと、 ReferenceError: OSS is not defined が発生します。

(推奨)<script> タグによるインポート

<!--  Internet Explorer には es6-promise が必要です。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>

モジュールによるインポート

OSS モジュールを手動で window.OSS に割り当てます。

説明

<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'

基本設定

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

  • userId パラメータを指定して、アップロード者を識別します。Alibaba Cloud アカウントセンターで取得した Alibaba Cloud アカウント ID またはカスタムユーザー ID を使用してください。userId が null または未指定の場合、エラーが発生します。

  • region パラメータをサポートされている ApsaraVideo VOD リージョン ID に設定してください。詳細については、「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 トークンを取得します。詳細については、「STS トークンの取得」をご参照ください。

返された承認情報を onUploadstarted コールバック内で設定します。 認証情報の有効期限が切れると、 onUploadTokenExpired コールバックが呼び出されます。 更新操作を呼び出して認証情報を再取得してください。

方法1:アップロード URL と認証情報

setUploadAuthAndAddress を呼び出して、アップロード URL と認証情報を設定します。認証情報の有効期限が切れると、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 API を呼び出し、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 = 'アップロードがタイムアウトしました...'
},

メソッドの説明

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

パラメータ

説明

uploadInfo

onUploadstarted コールバックの最初のパラメータ。

uploadAuth

CreateUploadVideo API が返すアップロード認証情報。

uploadAddress

CreateUploadVideo API が返すアップロード URL。

videoId

CreateUploadVideo API が返す音声または動画 ID。

方法2:STS トークン

setSTSToken を呼び出して STS トークンを設定します。トークンの有効期限が切れると、onUploadTokenExpired コールバックが呼び出されます。新しいトークンを使用して resumeUploadWithSTSToken を呼び出し、アップロードを再開してください。

 /* コールバック:アップロード開始 */
 onUploadstarted: function (uploadInfo) {
    /* STS トークンを取得し、setSTSToken メソッドで設定します。*/
    let stsUrl = "***.***.stsUrl"
    axios.get(stsUrl).then(({data}) => {
          var info = data.SecurityTokenInfo
          uploader.setSTSToken(uploadInfo, info.AccessKeyId, info.AccessKeySecret, info.SecretToken);
     })
 },
/* コールバック:認証情報タイムアウト */
 onUploadTokenExpired: function (uploadInfo) { 
     /* STS トークンを更新し、resumeUploadWithSTSToken メソッドでアップロードを再開します。*/
     let stsUrl = "***.***.stsUrl"
     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

はい

File

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

endpoint

いいえ

String

OSS エンドポイント。null の場合、AppServer 側で選択されます。

bucket

いいえ

String

ターゲットバケット。null の場合、AppServer 側で選択されます。

object

いいえ

String

ターゲットオブジェクト。null の場合、AppServer 側で選択されます。

paramData

いいえ

String

タイトル、説明、トランスコーディング、コールバック設定などのファイルメタデータ。 STS トークンアップロードを使用する場合は、paramData を指定します。

paramData パラメーターの値は JSON 文字列です。 例: '{"Vod":{}}'。 リクエストでは Vod を指定する必要があります。 Vod の下に、paramData パラメーターでサポートされているパラメーターをネストできます。 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 = 'アップロード中...'
},

アップロード結果の取得

// アップロード成功時のコールバック。
onUploadSucceed: function (uploadInfo) {
  console.log("onUploadSucceed: " + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
  self.statusText = 'アップロードが成功しました!'
},
// アップロード失敗時のコールバック。
onUploadFailed: function (uploadInfo, code, message) {
  console.log("onUploadFailed: file:" + uploadInfo.file.name + ",code:" + code + ", message:" + message)
  self.statusText = 'アップロードが失敗しました!'
},
  • 動画がアップロードされた後、 videoId を使用して再生 URL を取得します。詳細については、「再生認証情報の取得」をご参照ください。

  • 画像アップロードの場合、imageUrl は自動的に返されないため、取得するにはコールバックの設定が必要です。詳細については、「コールバックの設定」をご参照ください。

高度な機能

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

大容量ファイル (GB/TB) のアップロードや、中国本土からシンガポール リージョンへのアップロードなどのクロスリージョンアップロードを高速化します。

アップロードアクセラレーション機能を有効にするには、Alibaba Cloud アカウント UID と、加速対象のストレージアドレスを提供する必要があります。

アップロードアクセラレーション機能を有効にするには、チケットを送信してください。Alibaba Cloud アカウント UID とアップロードアクセラレーションを使用するストレージアドレスを提供してください。

方法1:アップロード URL と認証情報

CreateUploadVideo API を呼び出し、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 は、ファイルがアップロード中の場合にのみ有効です。

uploader.stopUpload();

ファイルリストの管理

次の操作で、アップロード中またはアップロード済みのファイルを管理できます。

  • listFiles:アップロードリストを照会します。

    addFile で追加されたファイルのリストを返します。 file プロパティはファイルタイプを示します。 リストを走査して、管理操作に使用するファイルのインデックスを取得します。

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

    uploader.deleteFile(index); // 削除するファイルのインデックス。 インデックスは listFiles で取得します。
  • cancelFile:ファイルのアップロードをキャンセルします。

    説明
    • cancelFile を呼び出すと、コンソールに oss is cancel as error というメッセージが表示されます。これにより、アップロードされたパートがストレージを占有してコストが発生するのを防ぎます。

    • キャンセルされたアップロードを再開するには、まず uploader.resumeFile(index); を呼び出してファイルを復元してください。

    uploader.cancelFile(index);
  • resumeFile:ファイルのアップロードを再開します。

    uploader.resumeFile(index);
  • cleanList:アップロードリストをクリアします。

    uploader.cleanList();

再開可能なアップロード

ページのクラッシュやブラウザーのエラーによってアップロードが失敗した場合、SDK は再アップロード時にブレークポイントから再開し、onUploadstarted コールバックから認証情報を取得します。方法 1: アップロード URL と認証情報を使用すると、videoId を使用して ApsaraVideo VOD API 操作を呼び出し、ブレークポイント情報を取得できます。

// アップロード開始時のコールバック。
onUploadstarted: function (uploadInfo) {
  // UploadAuth を使用する場合、uploadInfo.videoId の有無に応じて、呼び出す ApsaraVideo VOD API を切り替え、uploadAuth と uploadAddress を取得します。
  // uploadInfo.videoId に値がある場合は RefreshUploadVideo API を、ない場合は CreateUploadVideo API を呼び出します。
  // 注意:このデモはテスト用のため、API を直接呼び出して UploadAuth を取得しています。実際のシナリオでは、uploadInfo.videoId の有無に応じて、呼び出す API を判断してください。
  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 = 'ファイルアップロードが開始されました...'
    console.log("onUploadStarted:" + uploadInfo.file.name + ", endpoint:" + uploadInfo.endpoint + ", bucket:" + uploadInfo.bucket + ", object:" + uploadInfo.object)
  } else {
    // ブレークポイント情報を表示します。
    console.log(uploader.getCheckpoint(uploadInfo.file));
    // videoId パラメータに値がある場合、動画のアップロードが中断されたことを意味します。SDK はブレークポイントからアップロードを再開します。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);

例外処理

例外が発生した場合は、「エラーコード」トピックのクライアントアップロード SDK セクションを確認して、原因を特定してください。