本文介紹如何在微信小程式中使用SDK將媒體檔案從本地上傳至點播儲存。
功能說明
微信小程式SDK僅支援上傳音/視頻、圖片,不支援上傳輔助媒資。
SDK及Demo下載地址
SDK版本:1.0.3
更新時間:2024-07-15
下載包MD5值:5145518e0bbb410c156b37c04c447a6f
下載地址:微信小程式上傳SDK及範例程式碼
整合方式
將SDK檔案複製到您的專案中,並在對應頁面引入依賴。
import VODUpload from 'aliyun-upload-sdk-1.0.3.min.js'基礎設定
初始化上傳執行個體
初始化SDK執行個體時必須傳入userId用於標識上傳者的身份,必填,有值即可,可以是阿里雲帳號ID或者您自訂的使用者ID,您可以訪問阿里雲帳號中心查看帳號ID。如果沒有傳userId或傳值為空白則會報錯。
region欄位需要結合ApsaraVideo for VOD支援的點播地區標識填寫。
var uploader = new VODUpload({
//阿里雲的帳號ID,不可為空,您可以使用阿里雲帳號訪問帳號中心(https://account-console.alibabacloud.com/),即可查看帳號ID。
userId: "25346073170691****",
//上傳到點播的地區,預設值為'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) {},
});
設定憑證
請先瞭解用戶端上傳的整體上傳流程,並根據上傳的授權方式部署對應的授權服務:
選擇使用上傳地址和憑證方式, 請在授權服務中擷取上傳地址和憑證。
選擇使用STS Token方式,請在授權服務中擷取STS Token。
返回的授權資訊統一在onUploadstarted回調裡設定,當憑證失效時會在onUploadTokenExpired回調中響應,需要調用重新整理憑證的方法重新擷取。
上傳地址和憑證方式
設定上傳地址和憑證需要調用setUploadAuthAndAddress,當憑證到期,會觸發onUploadTokenExpired回調,需要調用resumeUploadWithAuth方法,設定新的憑證繼續上傳。
// 開始上傳
onUploadstarted: function (uploadInfo) {
console.log('檔案開始上傳...');
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介面返回的上傳地址。 |
videoId | CreateUploadVideo介面返回的音/視頻 ID. |
STS Token方式
設定STS Token需要調用setSTSToken,當STS Token失效時,會觸發onUploadTokenExpired回調,需要調用resumeUploadWithSTSToken方法,設定新的STS Token繼續上傳。
/*回調方法-開始上傳*/
onUploadstarted: function (uploadInfo) {
console.log('檔案開始上傳...');
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 Token中的 |
accessKeySecret | STS Token中的 |
secretToken | STS Token中的 |
添加檔案
<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 | 想要上傳到的endpoint,傳入null則由服務端決定。 |
bucket | 否 | String | 想要上傳到的bucket,傳入null則由服務端決定。 |
object | 否 | String | 想要上傳到的object,傳入null則由服務端決定。 |
paramData | 否 | String | 當您使用STS方式上傳時,可以通過
|
開始上傳
uploader.startUpload();檔案開始上傳後,
onUploadProgress回調開始同步上傳進度。檔案上傳成功後,
onUploadSucceed回調會返回上傳結果。
進階功能
上傳加速
當您需要上傳較大檔案(GB、TB層級)或進行跨地區上傳(比如在中國內地將視頻上傳到新加坡儲存地區的儲存地址)時,您可以啟用上傳加速功能。
開通上傳加速功能需提交工單,您需要提供阿里雲帳號UID和需要使用上傳加速的儲存地址。
上傳地址和憑證方式
如果您採用上傳地址和憑證方式上傳,請在CreateUploadVideo - 擷取音視頻上傳地址和憑證介面的自訂參數UserData中增加相應的key-value值,以設定加速配置。樣本如下:
UserData={
"AccelerateConfig": {
"Type": "oss",
"Domain": "https://oss-accelerate.aliyuncs.com"
}
}STS Token方式
如果您採用STS Token方式進行檔案上傳,您需要在調用addFile方法時,在參數paramData中增加UserData屬性,並配置上傳內容。樣本如下:
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 | 使用者bucket的加速地址(預設為https)。 說明 使用開通後分配的一個加速地址,例如:vod-*******.oss-accelerate.aliyuncs.com。 |
更多關於UserData設定請參考請求參數說明。
停止上傳
stopUpload要確保檔案正在上傳,有檔案上傳進度時才能工作。
uploader.stopUpload();隊列管理
對於上傳中或者上傳完成的檔案,可以通過對應的API進行管理。支援的API如下:
擷取上傳檔案清單
傳回值為通過addFile添加的檔案資訊列表。其中的file屬性為對應的File類型的檔案,可以通過遍曆擷取到需要操作的檔案的index。
var list = uploader.listFiles(); for (var i=0; i<list.length; i++) { console.log("file:" + list[i].file.name); }刪除上傳檔案
uploader.deleteFile(index);//需要刪除的檔案index,對應listFiles介面返回列表中元素的索引取消單個檔案上傳
說明cancelFile成功後會在控制台列印oss is cancel as error。這是SDK為了避免已上傳的部分分區檔案佔用儲存空間(如果佔用就會產生儲存費用)做的處理。取消檔案上傳後,如果後續還需要繼續上傳該檔案,則需要先使用
uploader.resumeFile(index);恢複該檔案後,再進行上傳。
uploader.cancelFile(index);恢複單個檔案上傳
uploader.resumeFile(index);清理上傳檔案清單
uploader.cleanList();
異常處理
使用微信小程式SDK發生異常時,可藉助錯誤碼快速定位原因,詳細內容請參見用戶端錯誤碼。