Objek yang disimpan di Object Storage Service (OSS) terdiri dari kunci, data, dan metadata objek. Metadata objek menggambarkan properti suatu objek, mencakup header HTTP standar dan metadata yang ditentukan pengguna. Anda dapat mengatur header HTTP standar untuk menentukan kebijakan permintaan HTTP kustom, seperti kebijakan cache atau unduhan paksa, serta menetapkan metadata yang ditentukan pengguna untuk mengidentifikasi tujuan atau properti objek tersebut.
Catatan penggunaan
Topik ini menggunakan titik akhir publik wilayah China (Hangzhou). Jika Anda mengakses OSS dari layanan Alibaba Cloud lainnya dalam wilayah yang sama dengan OSS, gunakan titik akhir internal. Untuk informasi selengkapnya mengenai wilayah dan titik akhir OSS, lihat Wilayah dan titik akhir.
Pada topik ini, instans OSSClient dibuat menggunakan titik akhir OSS. Jika Anda ingin membuat OSSClient menggunakan nama domain kustom atau Security Token Service (STS), lihat Buat instans OssClient.
Untuk mengatur metadata objek, Anda harus memiliki izin
oss:PutObject. Untuk mengambil metadata objek, Anda harus memiliki izinoss:GetObject. Untuk informasi selengkapnya, lihat Lampirkan kebijakan kustom ke RAM user.
Atur metadata objek
Kode berikut menunjukkan cara mengatur metadata objek.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Atur header HTTP. */
auto meta = ObjectMetaData();
meta.setContentType("text/plain");
meta.setCacheControl("max-age=3");
/* Atur metadata objek kustom. */
meta.UserMetaData()["meta"] = "meta-value";
std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
*content << "Thank you for using Alibaba Cloud Object Storage Service!";
auto outcome = client.PutObject(BucketName, ObjectName, content, meta);
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "PutObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Ambil metadata objek
Anda dapat mengambil metadata objek menggunakan salah satu metode berikut:
Metode | Deskripsi | Keuntungan |
GetObjectMeta | Mendapatkan ETag, ukuran, dan waktu modifikasi terakhir suatu objek. | Lebih ringan dan cepat |
HeadObject | Mendapatkan semua metadata objek. | Tidak ada |
Kode berikut menunjukkan cara mengambil metadata objek.
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;
int main(void)
{
/* Inisialisasi informasi akun OSS. */
/* Tetapkan yourEndpoint ke titik akhir wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), tetapkan titik akhir ke https://oss-cn-hangzhou.aliyuncs.com. */
std::string Endpoint = "yourEndpoint";
/* Tetapkan yourRegion ke wilayah tempat bucket berada. Misalnya, untuk wilayah China (Hangzhou), tetapkan wilayah ke cn-hangzhou. */
std::string Region = "yourRegion";
/* Tentukan nama bucket. Contoh: examplebucket. */
std::string BucketName = "examplebucket";
/* Tentukan path lengkap objek. Path lengkap tidak boleh mengandung nama bucket. Contoh: exampledir/exampleobject.txt. */
std::string ObjectName = "exampledir/exampleobject.txt";
/* Inisialisasi sumber daya jaringan. */
InitializeSdk();
ClientConfiguration conf;
conf.signatureVersion = SignatureVersionType::V4;
/* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode contoh ini, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah diatur. */
auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
OssClient client(Endpoint, credentialsProvider, conf);
client.SetRegion(Region);
/* Ambil metadata sebagian objek. */
auto outcome = client.GetObjectMeta(BucketName, ObjectName);
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "GetObjectMeta fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
else {
auto metadata = outcome.result();
std::cout << " get metadata success, ETag:" << metadata.ETag() << "; LastModified:"
<< metadata.LastModified() << "; Size:" << metadata.ContentLength() << std::endl;
}
/* Ambil semua metadata objek. */
outcome = client.HeadObject(BucketName, ObjectName);
if (!outcome.isSuccess()) {
/* Tangani pengecualian. */
std::cout << "HeadObject fail" <<
",code:" << outcome.error().Code() <<
",message:" << outcome.error().Message() <<
",requestId:" << outcome.error().RequestId() << std::endl;
return -1;
}
else {
auto headMeta = outcome.result();
std::cout <<"headMeta success, ContentType:"
<< headMeta.ContentType() << "; ContentLength:" << headMeta.ContentLength()
<< "; CacheControl:" << headMeta.CacheControl() << std::endl;
}
/* Lepaskan sumber daya jaringan. */
ShutdownSdk();
return 0;
}Referensi
Untuk kode contoh lengkap tentang cara mengatur dan mengambil metadata objek, lihat GitHub.
Untuk informasi selengkapnya mengenai operasi API yang dapat dipanggil untuk mengatur metadata objek selama unggahan simple, lihat PutObject.
Untuk informasi selengkapnya mengenai operasi API yang dapat dipanggil untuk mengambil metadata objek, lihat GetObjectMeta dan HeadObject.