このトピックでは、JavaScript 用アップロード SDK を使用してローカルメディアファイルを ApsaraVideo VOD にアップロードする方法について説明します。
ブラウザの要件
ブラウザ | サポート対象 | バージョン |
IE | ✔️ | Internet Explorer 10 以降 |
Microsoft Edge | ✔️ | すべて |
Chrome | ✔️ | 主流のブラウザバージョン |
Firefox | ✔️ | |
Safari | ✔️ | |
Android のデフォルトブラウザ | ✔️ | |
iOS のデフォルトブラウザ | ✔️ | |
Windows Phone のデフォルトブラウザ | ✔️ |
機能の説明
JavaScript 用アップロード SDK を使用してアップロードできるのは、音声、動画、および画像ファイルのみです。補助メディアアセットのアップロードには使用できません。
SDK とデモのダウンロード
バージョン: 1.5.7
最終更新日: 2024-01-30
ダウンロード URL: V1.5.7 JavaScript アップロード SDK、デモソースコード (jQuery および Vue)
統合方法
アップロード 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: アップロード URL と資格情報を使用する場合は、権限付与サービスからアップロード URL と資格情報を取得します。
方法 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 トークンの |
accessKeySecret | STS トークンの |
secretToken | STS トークンの |
ファイルの追加
次のコードを使用して、<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 にアップロードする場合、
|
アップロードの開始
uploader.startUpload();ファイルのアップロードが開始されると、
onUploadProgressコールバックが呼び出され、アップロードの進行状況が同期されます。ファイルのアップロードが成功すると、
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!'
},高度な機能
アップロードアクセラレーションの使用
ギガバイトまたはテラバイト単位の大きなファイルや、中国本土のリージョンからシンガポールストレージリージョンのストレージの場所への動画のアップロードなど、リージョンをまたいで動画をアップロードするには、アップロードアクセラレーション機能を有効にできます。
アップロードアクセラレーション機能を有効にするには、チケットを送信してください。[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 の使用中に例外が発生した場合は、エラーコードを参照して原因を特定できます。詳細については、「クライアントエラーコード」をご参照ください。