全部产品
Search
文档中心

Object Storage Service:Memulihkan objek (Java SDK V1)

更新时间:Nov 27, 2025

Jika akses real-time ke objek Archive dinonaktifkan, Anda harus memulihkannya terlebih dahulu sebelum dapat membacanya. Objek Cold Archive dan Deep Cold Archive tidak mendukung akses real-time dan harus dipulihkan sebelum dapat dibaca. Pemulihan objek Archive biasanya memerlukan beberapa menit, pemulihan objek Cold Archive memerlukan beberapa jam, sedangkan pemulihan objek Deep Cold Archive memerlukan 12 hingga 48 jam. Waktu pemulihan aktual dapat bervariasi. Topik ini menjelaskan cara memulihkan objek Archive, Cold Archive, dan Deep Cold Archive.

Perhatian

  • Metode RestoreObject hanya berlaku untuk objek Archive, Cold Archive, dan Deep Cold Archive.

  • Pada topik ini, titik akhir publik wilayah China (Hangzhou) digunakan. Untuk mengakses OSS dari layanan Alibaba Cloud lainnya di wilayah yang sama, gunakan titik akhir internal. Untuk detail wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir.

  • Pada topik ini, kredensial akses diperoleh dari variabel lingkungan. Untuk informasi lebih lanjut tentang cara mengonfigurasi kredensial akses, lihat Konfigurasi kredensial akses.

  • Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat instans OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Contoh konfigurasi untuk skenario umum.

  • Untuk memulihkan objek, Anda harus memiliki izin oss:RestoreObject. Untuk informasi lebih lanjut, lihat Memberikan izin kustom kepada RAM user.

Memulihkan objek Archive

Kode berikut menunjukkan cara memulihkan objek Archive:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Wilayah China (Hangzhou) digunakan dalam contoh ini. Tentukan titik akhir Anda yang sebenarnya.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tetapkan nama bucket. Misalnya, examplebucket.
        String bucketName = "examplebucket";
        // Tetapkan path lengkap objek Archive. Jangan sertakan nama bucket.
        String objectName = "exampledir/object";
        // Tetapkan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Saat instans OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);

            // Periksa apakah objek tersebut merupakan objek Archive.
            StorageClass storageClass = objectMetadata.getObjectStorageClass();
            if (storageClass == StorageClass.Archive) {
                // Pulihkan objek.
                ossClient.restoreObject(bucketName, objectName);

                // Tunggu hingga proses pemulihan selesai.
                do {
                    Thread.sleep(1000);
                    objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
                } while (!objectMetadata.isRestoreCompleted());
            }

            // Dapatkan objek yang telah dipulihkan.
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
            ossObject.getObjectContent().close();
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
                    + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
            System.out.println("Pesan Error:" + oe.getErrorMessage());
            System.out.println("Kode Error:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti client mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "misalnya tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}           

Memulihkan objek Cold Archive

Kode berikut menunjukkan cara memulihkan objek Cold Archive:

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Wilayah China (Hangzhou) digunakan dalam contoh ini. Tentukan titik akhir Anda yang sebenarnya.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tetapkan nama bucket. Misalnya, examplebucket.
        String bucketName = "examplebucket";
        // Tetapkan path lengkap objek Cold Archive. Jangan sertakan nama bucket.
        String objectName = "exampledir/object";
        // Tetapkan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Saat instans OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {            
            // Tetapkan prioritas pemulihan untuk objek Cold Archive.
            // RestoreTier.RESTORE_TIER_EXPEDITED: Objek dipulihkan dalam waktu 1 jam.
            // RestoreTier.RESTORE_TIER_STANDARD: Objek dipulihkan dalam waktu 2 hingga 5 jam.
            // RestoreTier.RESTORE_TIER_BULK: Objek dipulihkan dalam waktu 5 hingga 12 jam.
            RestoreJobParameters jobParameters = new RestoreJobParameters(RestoreTier.RESTORE_TIER_BULK);

            // Konfigurasikan parameter pemulihan. Contoh ini menunjukkan cara mengatur pemulihan agar selesai dalam waktu 5 jam dan menyimpan objek dalam keadaan dipulihkan selama 2 hari.
            // Parameter pertama menentukan jumlah hari objek disimpan dalam keadaan dipulihkan. Nilai default adalah 1 hari. Parameter ini berlaku untuk objek Archive dan Cold Archive.
            // Parameter kedua, jobParameters, menentukan prioritas pemulihan. Parameter ini hanya berlaku untuk objek Cold Archive.
            RestoreConfiguration configuration = new RestoreConfiguration(2, jobParameters);

            // Kirim permintaan pemulihan.
            ossClient.restoreObject(bucketName, objectName, configuration);
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
                    + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
            System.out.println("Pesan Error:" + oe.getErrorMessage());
            System.out.println("Kode Error:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti client mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "misalnya tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Memulihkan objek Deep Cold Archive

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Wilayah China (Hangzhou) digunakan dalam contoh ini. Tentukan titik akhir Anda yang sebenarnya.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tetapkan nama bucket. Misalnya, examplebucket.
        String bucketName = "examplebucket";
        // Tetapkan path lengkap objek Deep Cold Archive. Jangan sertakan nama bucket.
        String objectName = "exampledir/object";
        // Tetapkan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), tetapkan wilayah menjadi cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Saat instans OSSClient tidak lagi diperlukan, panggil metode shutdown untuk melepaskan sumber dayanya.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {          
            // Konfigurasikan prioritas pemulihan. Contoh ini menggunakan RESTORE_TIER_STANDARD.
            // RestoreTier.RESTORE_TIER_EXPEDITED: Objek dipulihkan dalam waktu 12 jam.            
            // RestoreTier.RESTORE_TIER_STANDARD: Objek dipulihkan dalam waktu 48 jam.
            RestoreJobParameters jobParameters = new RestoreJobParameters(RestoreTier.RESTORE_TIER_STANDARD);

            // Konfigurasikan durasi objek tetap dalam keadaan dipulihkan. Nilai default adalah 1 hari. Contoh ini menetapkan durasi menjadi 2 hari.
            RestoreConfiguration configuration = new RestoreConfiguration(2, jobParameters);

            // Kirim permintaan pemulihan.
            ossClient.restoreObject(bucketName, objectName, configuration);
        } catch (OSSException oe) {
            System.out.println("Terjadi OSSException, yang berarti permintaan Anda berhasil mencapai OSS, "
                    + "tetapi ditolak dengan tanggapan error karena suatu alasan.");
            System.out.println("Pesan Error:" + oe.getErrorMessage());
            System.out.println("Kode Error:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Terjadi ClientException, yang berarti client mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "misalnya tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Referensi

  • Untuk kode contoh lengkap pemulihan objek, lihat contoh GitHub.

  • Untuk informasi lebih lanjut tentang operasi API untuk memulihkan objek, lihat RestoreObject.