Object Storage Service (OSS) menyediakan kelas penyimpanan berikut untuk berbagai skenario penyimpanan data, mulai dari data panas hingga data dingin: Standard, Infrequent Access (IA), Archive, Cold Archive, dan Deep Cold Archive. Di OSS, konten objek tidak dapat diubah setelah dibuat. Untuk mengonversi kelas penyimpanan objek, Anda harus menggunakan metode Bucket.CopyObject guna menyalin objek tersebut, membuat objek baru, lalu mengatur kelas penyimpanan objek baru tersebut.
Catatan penggunaan
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir yang didukung, lihat Wilayah dan titik akhir.
Kredensial akses pada topik ini diperoleh dari variabel lingkungan. Untuk informasi selengkapnya 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 dengan nama domain kustom atau Security Token Service (STS), lihat Contoh konfigurasi untuk skenario umum.
Untuk mengonversi kelas penyimpanan objek, Anda harus memiliki izin
oss:GetObject,oss:PutObject, danoss:RestoreObject. Untuk informasi selengkapnya, lihat Melampirkan kebijakan kustom ke RAM user.
Contoh
Jika Anda mengonversi kelas penyimpanan objek Infrequent Access (IA), Archive, Cold Archive, atau Deep Cold Archive, atau menghapus objek sebelum masa penyimpanan minimum berakhir, Anda akan dikenai biaya karena durasi penyimpanan lebih pendek dari durasi minimum. Untuk informasi selengkapnya, lihat Bagaimana saya dikenai biaya untuk objek yang durasi penyimpanannya kurang dari durasi penyimpanan minimum?.
Mengonversi kelas penyimpanan dari Standard atau Infrequent Access ke Archive, Cold Archive, atau Deep Cold Archive
Kode berikut menunjukkan cara mengonversi kelas penyimpanan objek dari Standard atau Infrequent Access ke Archive, Cold Archive, atau 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.CopyObjectRequest;
import com.aliyun.oss.model.CopyObjectResult;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.StorageClass;
public class Demo {
public static void main(String[] args) throws Exception {
// Contoh berikut menggunakan titik akhir wilayah China (Hangzhou). Ganti titik akhir dengan titik akhir yang sebenarnya.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Sebelum menjalankan contoh ini, buat bucket dan objek. Objek harus berada dalam kelas penyimpanan Standard atau Infrequent Access.
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket. Contoh: exampleobject.txt.
String objectName = "exampleobject.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Setelah instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Buat objek CopyObjectRequest.
CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;
// Buat objek ObjectMetadata.
ObjectMetadata objectMetadata = new ObjectMetadata();
// Konversi kelas penyimpanan objek ke Archive.
objectMetadata.setHeader("x-oss-storage-class", StorageClass.Archive);
// Konversi kelas penyimpanan objek ke Cold Archive.
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.ColdArchive);
// Konversi kelas penyimpanan objek ke Deep Cold Archive.
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.DeepColdArchive);
request.setNewObjectMetadata(objectMetadata);
// Ubah kelas penyimpanan objek.
CopyObjectResult result = ossClient.copyObject(request);
} 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, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Error:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Mengonversi kelas penyimpanan dari Archive ke Standard atau Infrequent Access
Kode berikut menunjukkan cara mengonversi kelas penyimpanan objek dari Archive ke Standard atau Infrequent Access.
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.CopyObjectRequest;
import com.aliyun.oss.model.CopyObjectResult;
import com.aliyun.oss.model.ObjectMetadata;
import com.aliyun.oss.model.StorageClass;
public class Demo {
public static void main(String[] args) throws Exception {
// Contoh berikut menggunakan titik akhir wilayah China (Hangzhou). Ganti titik akhir dengan titik akhir yang sebenarnya.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Peroleh kredensial akses dari variabel lingkungan. Sebelum menjalankan contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Sebelum menjalankan contoh ini, buat bucket dan objek. Objek harus berada dalam kelas penyimpanan Archive.
// Tentukan nama bucket. Contoh: examplebucket.
String bucketName = "examplebucket";
// Tentukan path lengkap objek. Jangan sertakan nama bucket. Contoh: exampleobject.txt.
String objectName = "exampleobject.txt";
// Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah menjadi cn-hangzhou.
String region = "cn-hangzhou";
// Buat instans OSSClient.
// Setelah instans OSSClient tidak lagi digunakan, panggil metode shutdown untuk melepas sumber daya.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Dapatkan metadata objek.
ObjectMetadata objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
// Periksa apakah objek merupakan objek Archive. Jika iya, Anda harus memulihkannya terlebih dahulu sebelum dapat mengubah kelas penyimpanannya.
StorageClass storageClass = objectMetadata.getObjectStorageClass();
System.out.println("tipe penyimpanan:" + storageClass);
if (storageClass == StorageClass.Archive) {
// Pulihkan objek.
ossClient.restoreObject(bucketName, objectName);
// Tunggu hingga objek dipulihkan.
do {
Thread.sleep(1000);
objectMetadata = ossClient.getObjectMetadata(bucketName, objectName);
} while (!objectMetadata.isRestoreCompleted());
}
// Buat objek CopyObjectRequest.
CopyObjectRequest request = new CopyObjectRequest(bucketName, objectName, bucketName, objectName) ;
// Buat objek ObjectMetadata.
objectMetadata = new ObjectMetadata();
// Konversi kelas penyimpanan objek ke Infrequent Access.
objectMetadata.setHeader("x-oss-storage-class", StorageClass.IA);
// Konversi kelas penyimpanan objek ke Standard.
// objectMetadata.setHeader("x-oss-storage-class", StorageClass.Standard);
request.setNewObjectMetadata(objectMetadata);
// Ubah kelas penyimpanan objek.
CopyObjectResult result = ossClient.copyObject(request);
} 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, "
+ "seperti tidak dapat mengakses jaringan.");
System.out.println("Pesan Error:" + ce.getMessage());
} finally {
if (ossClient != null) {
ossClient.shutdown();
}
}
}
}Referensi
Untuk kode contoh lengkap tentang mengonversi kelas penyimpanan objek, lihat contoh GitHub.
Untuk informasi selengkapnya tentang operasi API untuk mengonversi kelas penyimpanan objek, lihat CopyObject.