斷點續傳下載
當下載大檔案時,如果網路不穩定或者程式異常退出,會導致下載失敗,甚至重試多次仍無法完成下載。為此OSS提供了斷點續傳下載功能。
斷點續傳下載將需要下載的檔案分成若干個分區分別下載,所有分區都下載完成後,將所有分區合并成完整的檔案。
您可以通過ossClient.downloadFile方法實現斷點續傳下載。此方法的DownloadFileRequest請求包含以下參數:
參數 | 描述 | 是否必需 | 預設值 | 如何設定 |
---|---|---|---|---|
bucket | 儲存空間名稱。 | 是 | 無 | 通過構造方法設定。 |
key | OSS檔案名稱。 | 是 | 無 | 通過構造方法設定。 |
downloadFile | 本地檔案。OSS檔案將下載到該檔案。 | 否 | OSS檔案名稱 | 通過構造方法或setDownloadFile設定。 |
partSize | 分區大小,取值範圍為1B~5GB。 | 否 | 檔案大小/10000 | 通過setPartSize設定。 |
taskNum | 分區下載的並發數。 | 否 | 1 | 通過setTaskNum設定。 |
enableCheckpoint | 是否開啟斷點續傳功能。 | 否 | 關閉 | 通過setEnableCheckpoint設定。 |
checkpointFile | 記錄本地分區下載結果的檔案。開啟斷點續傳功能時需要設定此參數。下載過程中的進度資訊會保存在該檔案中,如果某一分區下載失敗,再次下載時會根據檔案中記錄的點繼續下載。下載完成後,該檔案會被刪除。 | 否 | downloadFile.ucp(與DownloadFile同目錄)。 | 通過setCheckpointFile設定。 |
以下代碼用於斷點續傳下載:
// Endpoint以杭州為例,其它Region請按實際情況填寫。
String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";
// 阿里雲主帳號AccessKey擁有所有API的存取權限,風險很高。強烈建議您建立並使用RAM帳號進行API訪問或日常運維,請登入 https://ram.console.aliyun.com 建立RAM帳號。
String accessKeyId = "<yourAccessKeyId>";
String accessKeySecret = "<yourAccessKeySecret>";
String bucketName = "<yourBucketName>";
String objectName = "<yourObjectName>";
// 建立OSSClient執行個體。
OSSClient ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
// 下載請求,10個任務並發下載,啟動斷點續傳。
DownloadFileRequest downloadFileRequest = new DownloadFileRequest(bucketName, objectName);
downloadFileRequest.setDownloadFile("<yourDownloadFile>");
downloadFileRequest.setPartSize(1 * 1024 * 1024);
downloadFileRequest.setTaskNum(10);
downloadFileRequest.setEnableCheckpoint(true);
downloadFileRequest.setCheckpointFile("<yourCheckpointFile>");
// 下載檔案。
DownloadFileResult downloadRes = ossClient.downloadFile(downloadFileRequest);
// 下載成功時,會返迴文件元資訊。
downloadRes.getObjectMeta();
// 關閉OSSClient。
ossClient.shutdown();