在受版本控制的存储空间(Bucket)中,Object的各个版本可以对应不同的存储类型。RestoreObject接口默认解冻Object的当前版本,允许通过指定versionId的方式来解冻指定版本的Object。

以下代码用于解冻文件:
// 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>";
// 指定归档类文件的版本id
String versionid = "<yourArchiveObjectVersionid>";

// 获取指定版本的文件的部分元信息。
GenericRequest getObjectMetadataRequest = new GenericRequest(bucketName,objectName, versionid);
ObjectMetadata objectMetadata = ossClient.getObjectMetadata(getObjectMetadataRequest);

// 校验指定版本的文件是否为归档文件。
StorageClass storageClass = objectMetadata.getObjectStorageClass();
System.out.println("object storage class:" + objectMetadata.getObjectStorageClass());
if (storageClass == StorageClass.Archive) {
    // 解冻文件。
    GenericRequest genericRequest = new GenericRequest(bucketName, objectName, versionid);
    RestoreObjectResult restoreObjectResult = ossClient.restoreObject(genericRequest);
    System.out.println("restor versionid: " + restoreObjectResult.getVersionId());

    // 等待解冻完成。
    do {
        Thread.sleep(1000);
        objectMetadata = ossClient.getObjectMetadata(getObjectMetadataRequest);
        System.out.println("is competed:" + objectMetadata.isRestoreCompleted());
    } while (!objectMetadata.isRestoreCompleted());
}

// 获取指定版本解冻文件。
GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
getObjectRequest.setVersionId(versionid);
OSSObject ossObject = ossClient.getObject(getObjectRequest);
ossObject.getObjectContent().close();

解冻文件的详细信息请参见RestoreObject