全部產品
Search
文件中心

Object Storage Service:Node.js斷點續傳上傳

更新時間:Oct 29, 2024

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