このトピックでは、WeChat ミニプログラム用の SDK を使用して、ローカルメディアファイルを ApsaraVideo VOD ストレージにアップロードする方法について説明します。
機能の説明
WeChat ミニプログラム SDK は、オーディオ、ビデオ、およびイメージファイルのアップロードをサポートしています。補助メディアアセットのアップロードはサポートしていません。
SDK とデモのダウンロード
バージョン: 1.0.3
最終更新日: 2024-07-15
パッケージの MD5 ハッシュ: 5145518e0bbb410c156b37c04c447a6f
ダウンロード URL: WeChat ミニプログラムアップロード SDK およびサンプルコード
統合方法
SDK ファイルをプロジェクトにコピーし、関連ページで依存関係をインポートします。
import VODUpload from 'aliyun-upload-sdk-1.0.3.min.js'基本設定
アップロードインスタンスの初期化
SDK インスタンスを初期化する際、アップロード者を識別するために userId パラメーターを渡す必要があります。このパラメーターは必須であり、空にすることはできません。Alibaba Cloud アカウント ID またはカスタムユーザー ID を使用できます。アカウント ID を表示するには、[アカウントセンター] に移動します。userId パラメーターを渡さない場合、または空の値を渡した場合は、エラーが報告されます。
regionフィールドは、ApsaraVideo VOD でサポートされている リージョン ID のいずれかに設定する必要があります。
var uploader = new VODUpload({
// Alibaba Cloud アカウントの ID。このパラメーターは空にできません。アカウント ID を表示するには、アカウントセンター (https://account-console.alibabacloud.com/) にアクセスしてください。
userId: "25346073170691****",
// ApsaraVideo VOD にファイルをアップロードするリージョン。デフォルト値: 'cn-shanghai'。その他の有効な値には、'eu-central-1' や 'ap-southeast-1' があります。詳細については、「メディアアップロードの概要」をご参照ください。
region: "cn-shanghai",
// ネットワークの問題でアップロードが失敗した場合のリトライ回数。デフォルト値: 3。
retryCount: 3,
// ネットワークの問題でアップロードが失敗した場合のリトライ間隔。デフォルト値: 2 秒。
retryDuration: 2,
// アップロードが開始されます。
onUploadstarted: function (uploadInfo) {},
// ファイルがアップロードされました。
onUploadSucceed: function (uploadInfo) {},
// ファイルのアップロードに失敗しました。
onUploadFailed: function (uploadInfo, code, message) {},
// アップロードの進行状況。単位: バイト。
onUploadProgress: function (uploadInfo, totalSize, loadedPercent) {},
// アップロード認証情報が有効期限切れになりました。
onUploadTokenExpired: function (uploadInfo) {},
// すべてのファイルがアップロードされました。
onUploadEnd: function (uploadInfo) {},
});
認証情報の設定
まず、クライアントの全体的な アップロードプロセス を理解します。次に、希望する権限付与方法に基づいて、対応する権限付与サービスをデプロイします。
アップロード URL と認証情報方式を使用する場合は、権限付与サービスから アップロード URL と認証情報を取得 する必要があります。
セキュリティトークンサービス (STS) トークン方式を使用する場合は、権限付与サービスから STS トークンを取得 する必要があります。
返された権限付与情報を onUploadstarted コールバックで設定します。認証情報が有効期限切れになると、onUploadTokenExpired コールバックがトリガーされます。その後、メソッドを呼び出して認証情報を更新し、新しい認証情報を取得する必要があります。
アップロード URL と認証情報方式
アップロード URL と認証情報を設定するには、setUploadAuthAndAddress メソッドを呼び出します。認証情報が有効期限切れになると、onUploadTokenExpired コールバックがトリガーされます。その後、resumeUploadWithAuth メソッドを呼び出して新しい認証情報を設定し、アップロードを再開できます。
// アップロードが開始されます。
onUploadstarted: function (uploadInfo) {
console.log('Starting file upload...');
console.log("onUploadStarted:" + JSON.stringify(uploadInfo))
var url = "https://alivc-demo.aliyuncs.com/demo/getVideoUploadAuth?title=" + uploadInfo.url + "&fileName=" + uploadInfo.url + "&fileSize=" + uploadInfo.fileSize + "&description=description&coverURL=" + uploadInfo.coverUrl + "&tags=tags";
wx.request({
'url': url,
success: (res => {
if (res.statusCode === 200) {
var akInfo = res.data.data;
uploader.setUploadAuthAndAddress(uploadInfo, akInfo.uploadAuth, akInfo.uploadAddress, akInfo.imageId);
} else {
console.log(res)
uploader.stopUpload();
}
}),
fail: (res => {
uploader.stopUpload();
console.log(res)
})
});
},
// アップロード認証情報が有効期限切れになりました。
onUploadTokenExpired: function (uploadInfo) {
const url = "https://alivc-demo.aliyuncs.com/demo/refreshVideoUploadAuth?videoId=" + uploadInfo.videoId;
wx.request({
'url': url,
success: (res => {
if (res.statusCode === 200) {
var akInfo = res.data.data;
uploader.resumeUploadWithAuth(akInfo.uploadAuth);
} else {
console.log(res)
uploader.stopUpload();
}
}),
fail: (res => {
uploader.stopUpload();
console.log(res)
})
});
},メソッドの説明:
uploader.setUploadAuthAndAddress(uploadInfo, uploadAuth, uploadAddress, videoId)
uploader.resumeUploadWithAuth(uploadAuth)パラメーター | 説明 |
uploadInfo | onUploadstarted コールバックの最初のパラメーターから値を取得できます。 |
uploadAuth | CreateUploadVideo 操作によって返されるアップロード認証情報。 |
uploadAddress | CreateUploadVideo 操作によって返されるアップロード URL。 |
videoId | CreateUploadVideo 操作によって返されるオーディオまたはビデオ ID。 |
STS トークン方式
STS トークンを設定するには、setSTSToken メソッドを呼び出します。STS トークンが有効期限切れになると、onUploadTokenExpired コールバックがトリガーされます。その後、resumeUploadWithSTSToken メソッドを呼び出して新しい STS トークンを設定し、アップロードを再開できます。
/* コールバックメソッド - アップロードが開始されます。*/
onUploadstarted: function (uploadInfo) {
console.log('Starting file upload...');
console.log("onUploadStarted:" + JSON.stringify(uploadInfo))
wx.request({
url: "https://alivc-demo.aliyuncs.com/demo/getSts",
// data: data,
// header: header,
// method: method,
success: (res => {
if (res.statusCode === 200) {
var akInfo = res.data.data;
uploader.setSTSToken(uploadInfo, akInfo.accessKeyId, akInfo.accessKeySecret, akInfo.securityToken);
} else {
console.log(res)
}
}),
fail: (res => {
onError(res);
})
});
},
// アップロード認証情報が有効期限切れになりました。
onUploadTokenExpired: function (uploadInfo) {
const url = "https://alivc-demo.aliyuncs.com/demo/getSts";
wx.request({
'url': url,
success: (res => {
if (res.statusCode === 200) {
var akInfo = res.data.data;
uploader.resumeUploadWithSTSToken(akInfo.uploadAuth);
} else {
console.log(res)
uploader.stopUpload();
}
}),
fail: (res => {
uploader.stopUpload();
console.log(res)
})
});
},
メソッドの説明:
uploader.setSTSToken(uploadInfo, accessKeyId, accessKeySecret, secretToken)
uploader.resumeUploadWithSTSToken(accessKeyId, accessKeySecret, secretToken)パラメーター | 説明 |
uploadInfo | onUploadstarted コールバックの最初のパラメーターから値を取得できます。 |
accessKeyId | STS トークンの |
accessKeySecret | STS トークンの |
secretToken | STS トークンの |
ファイルの追加
<view class="weui-uploader__input-box">
<view class="weui-uploader__input" bindtap="chooseVideo"></view>
</view>// ビデオを選択
chooseVideo: function (e) {
var that = this;
wx.chooseVideo({
sourceType: ['album', 'camera'],
maxDuration: 60,
compressed: false,
camera: 'back',
success: function (res) {
var file = {url: res.tempFilePath, coverUrl: res.thumbTempFilePath};
var uploader = that.data.uploader;
var paramData = '{"Vod":{}}';
uploader.addFile(file, null, null, null, paramData);
}
})
},メソッドの説明:
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 トークンを使用して ApsaraVideo VOD にビデオまたはオーディオファイルをアップロードする場合、
|
アップロードの開始
uploader.startUpload();ファイルのアップロードが開始されると、
onUploadProgressコールバックが呼び出され、アップロードの進行状況が同期されます。ファイルのアップロードが成功すると、
onUploadSucceedコールバックが呼び出され、アップロード結果が返されます。
高度な機能
アップロードアクセラレーションの使用
ギガバイトまたはテラバイト単位の大きなファイル、または中国本土のリージョンから シンガポール リージョンのストレージの場所へのビデオのアップロードなど、リージョンをまたいでアップロードする場合、アップロードアクセラレーション機能を有効にできます。
アップロードアクセラレーション機能を有効にするには、チケットを送信してください。[Alibaba Cloud アカウント UID] と、アップロードアクセラレーションを有効にする [ストレージの場所] を提供する必要があります。
方法 1: アップロード URL と認証情報
この方法を使用してファイルをアップロードする場合は、CreateUploadVideo 操作を呼び出し、UserData パラメーターでキーと値のペアを指定して、アクセラレーション設定を構成します。サンプルコード:
UserData={
"AccelerateConfig": {
"Type": "oss",
"Domain": "https://oss-accelerate.aliyuncs.com"
}
}方法 2: STS トークン
この方法を使用してファイルをアップロードする場合は、addFile メソッドを呼び出し、UserData プロパティを parmData パラメーターに追加してから、アップロードコンテンツを構成します。サンプルコード:
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();
トラブルシューティング
WeChat ミニプログラム SDK の使用中にエラーが発生した場合、エラーコードを使用して原因をすばやく特定できます。詳細については、「クライアント側のエラーコード」をご参照ください。