斷點續傳上傳將要上傳的文件分成若干個分片(Part)分別上傳,所有分片都上傳完成后,將所有分片合并成完整的文件,完成整個文件的上傳。
說明
以下示例代碼中的catch語法,請自行學習es6 promise、async/await。關于SDK的使用方式,請參見安裝。
關于斷點續傳上傳的更多信息,請參見斷點續傳上傳。您還可以通過設置生命周期規則來定時清理不需要的Part。更多信息,請參見刪除碎片。
分片上傳提供progress參數方便用戶傳遞進度回調,在回調中SDK將當前已經上傳成功的比例和斷點信息作為參數。為了實現斷點上傳,可以在上傳過程中保存斷點信息(checkpoint),發生錯誤后,再將已保存的checkpoint作為參數傳遞給multipartUpload,此時將從上次失敗的地方繼續上傳。
示例代碼
以下代碼用于斷點續傳上傳。
const OSS = require('ali-oss')
const client = new OSS({
// yourregion填寫Bucket所在地域。以華東1(杭州)為例,Region填寫為oss-cn-hangzhou。
region: 'yourregion',
// 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
accessKeyId: process.env.OSS_ACCESS_KEY_ID,
accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
authorizationV4: true,
// 填寫Bucket名稱。
bucket: 'examplebucket',
});
// yourfilepath填寫已上傳文件所在的本地路徑。
const filePath = "yourfilepath";
let checkpoint;
async function resumeUpload() {
// 重試五次。
for (let i = 0; i < 5; i++) {
try {
const result = await client.multipartUpload('object-name', filePath, {
checkpoint,
async progress(percentage, cpt) {
checkpoint = cpt;
},
});
console.log(result);
break; // 跳出當前循環。
} catch (e) {
console.log(e);
}
}
}
resumeUpload();
上述示例代碼將checkpoint保存在變量中,如果程序崩潰,則checkpoint信息會丟失。建議將checkpoint保存在文件中,在程序重啟后則可以從文件中讀取checkpoint信息。
相關文檔
關于斷點續傳上傳的完整示例代碼,請參見GitHub示例。
文檔內容是否對您有幫助?