歸檔類型(Archive)的檔案需要解凍(Restore)之後才能讀取。非歸檔類型的檔案,不要調用restoreObject方法。
歸檔檔案的狀態變換過程如下:
- 歸檔類型的檔案初始時處於冷凍狀態。
- 提交解凍操作後,服務端執行解凍,檔案處於解凍中的狀態。
- 完成解凍後,可以讀取檔案。解凍狀態預設持續1天,最多延長7天,之後檔案又回到冷凍狀態。
以下代碼用於解凍歸檔檔案:
// 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);
ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
// 校驗檔案是否為歸檔檔案。
StorageClass storageClass = objectMetadata.getObjectStorageClass();
if (storageClass == StorageClass.Archive) {
// 解凍檔案。
ossClient.restoreObject(bucketName, objectName);
// 等待解凍完成。
do {
Thread.sleep(1000);
objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
} while (!objectMetadata.isRestoreCompleted());
}
// 獲取解凍檔案。
OSSObject ossObject = ossClient.getObject(bucketName, objectName);
ossObject.getObjectContent().close();
// 關閉OSSClient。
ossClient.shutdown();