全部产品
Search
文档中心

Object Storage Service:Bagaimana cara memulihkan beberapa objek sekaligus?

更新时间:Jul 06, 2025

Jika Anda tidak mengaktifkan akses real-time untuk objek Arsip, Anda hanya dapat mengakses objek tersebut setelah memulihkannya. Konsol Object Storage Service (OSS) hanya memungkinkan pemulihan satu objek pada satu waktu dan tidak mendukung pemulihan beberapa objek dalam direktori secara bersamaan. Untuk memulihkan beberapa objek sekaligus, gunakan metode alternatif. Topik ini menjelaskan langkah-langkahnya.

Solusi

Untuk memulihkan beberapa objek dalam bucket sekaligus, ikuti langkah-langkah berikut:

1. Daftarkan semua objek yang ingin dipulihkan.

  • Gunakan fitur Daftar Bucket untuk mencantumkan objek dalam bucket. Untuk detail lebih lanjut, lihat Daftar Bucket.

  • Alternatifnya, Anda dapat mencantumkan objek dengan memanggil operasi ListObjects. Namun, biaya operasi ini lebih tinggi dibandingkan pencatatan berbasis inventaris. Untuk informasi lebih lanjut, lihat Daftar objek dan Biaya pemanggilan operasi API.

2. Jika menggunakan fitur Daftar Bucket, filter objek dengan StorageClass Arsip dari daftar inventaris yang dihasilkan dan catat jalur lengkap objek tanpa menyertakan nama bucket.

Catatan

Jika menggunakan OSS SDK, gunakan kombinasi Key dan StorageClass untuk mendapatkan jalur objek dan kelas penyimpanannya. Contoh kode berikut mengembalikan jalur objek "s" dan kelas penyimpanannya.

System.out.println("fileurl"+s.getKey()+"&stu:"+s.getStorageClass());

3. Pulihkan objek di jalur yang sesuai secara bersamaan. Gunakan salah satu metode berikut untuk memulihkan beberapa objek sekaligus. Untuk detail lebih lanjut, lihat Pulihkan objek.

  • ossutil: Dibandingkan dengan metode lainnya, ossutil lebih sederhana dan efisien jika Anda terbiasa dengan operasi baris perintah.

  • OSS API: OSS API tidak mendukung pemulihan beberapa objek sekaligus. Anda harus memanggil operasi RestoreObject untuk setiap objek secara individual. Metode ini memerlukan penulisan kode untuk menghitung tanda tangan saat memanggil operasi. Gunakan OSS API jika aplikasi Anda memerlukan tingkat penyesuaian yang tinggi.

  • OSS SDK: Dibandingkan dengan ossutil, penggunaan OSS SDK lebih kompleks karena memerlukan kemampuan membaca dan memodifikasi kode. Namun, OSS SDK menawarkan reusabilitas kode yang lebih baik. Di akhir topik ini, contoh kode disediakan untuk menunjukkan cara memulihkan beberapa objek sekaligus menggunakan OSS SDK untuk Java.

Contoh Java

Informasi tambahan

Contoh kode Java dalam topik Pulihkan objek hanya memulihkan satu objek tunggal. Untuk memulihkan beberapa objek sekaligus, ganti variabel objectName dalam contoh kode Java dengan variabel tipe daftar yang berisi jalur objek yang akan dipulihkan. Contoh kode berikut dimodifikasi dari contoh kode Java dalam topik Pulihkan objek untuk mendukung pemulihan beberapa objek sekaligus.

Catatan

Untuk memeriksa status pemulihan, ikuti langkah-langkah dalam Bagaimana cara memeriksa apakah objek OSS telah dipulihkan?

Jika Anda ingin memulihkan objek Cold Archive atau Deep Cold Archive, lihat Ikhtisar dan klik tautan ke Restore objects pada topik yang relevan.

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

import java.util.ArrayList;
import java.util.List;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, endpoint wilayah China (Beijing) digunakan. Tentukan endpoint aktual Anda.
        String endpoint = "oss-cn-beijing.aliyuncs.com";
        // Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou.
        String region = "cn-hangzhou";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket.
        String bucketName = "examplebucket";
        // Buat daftar jalur lengkap objek Arsip yang akan dipulihkan. Jangan masukkan nama bucket dalam jalur lengkap objek.
        List<String> filePaths = new ArrayList<>();
        filePaths.add("filePath1");
        filePaths.add("filePath2");

        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya ketika OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        // Nyatakan secara eksplisit penggunaan algoritma tanda tangan V4.
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            for (String filePath : filePaths) {
                ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, filePath);
                // Periksa apakah objek tersebut adalah objek Arsip.
                StorageClass storageClass = objectMetadata.getObjectStorageClass();
                if (storageClass == StorageClass.Archive) {
                    // Pulihkan objek.
                    ossClient.restoreObject(bucketName, filePath);
                }
                System.out.println(filePath+" mulai dicairkan.");
            }
        } catch (OSSException oe) {
            System.out.println("Tangkap OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena suatu alasan.");
            System.out.println("Pesan Kesalahan:" + oe.getErrorMessage());
            System.out.println("Kode Kesalahan:" + oe.getErrorCode());
            System.out.println("ID Permintaan:" + oe.getRequestId());
            System.out.println("ID Host:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Tangkap ClientException, yang berarti klien mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "seperti tidak dapat mengakses jaringan.");
            System.out.println("Pesan Kesalahan:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Referensi