斷點續傳上傳將要上傳的檔案分成若干個分區(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樣本。