全部产品
Search
文档中心

Object Storage Service:Kelola metadata objek dengan mengonfigurasi header HTTP

更新时间:Jul 06, 2025

Objek yang disimpan di Object Storage Service (OSS) terdiri dari kunci, data, dan metadata. Metadata objek menggambarkan objek tersebut, mencakup header HTTP standar dan metadata pengguna. Anda dapat membuat kebijakan permintaan HTTP kustom seperti kebijakan cache objek dan kebijakan unduhan objek paksa dengan mengonfigurasi header HTTP standar. Anda juga dapat mengonfigurasi metadata pengguna untuk mengidentifikasi tujuan atau atribut objek.

Header HTTP standar

OSS mempertahankan header HTTP standar setiap objek yang diunggah ke bucket. Tabel berikut menjelaskan header HTTP standar.

Header HTTP standar

Deskripsi

Content-Type

Tipe media objek. Browser menentukan format dan tipe enkode yang digunakan untuk membaca objek berdasarkan tipe media objek. Jika header ini tidak ditentukan, OSS akan memberikan nilai berdasarkan ekstensi nama objek. Jika nama objek tidak memiliki ekstensi, nilai default application/octet-stream digunakan sebagai tipe media objek. Untuk informasi lebih lanjut tentang cara menentukan tipe media objek, lihat Bagaimana cara mengonfigurasi header Content-Type?

Content-Encoding

Metode yang digunakan untuk mengenkripsi objek. Anda harus menentukan header ini berdasarkan tipe enkode objek. Jika tidak, browser yang bertindak sebagai klien mungkin gagal mem-parsing tipe enkode objek, atau objek mungkin gagal diunduh. Jika objek tidak dienkripsi, biarkan header ini kosong. Nilai valid:

  • identity (default): OSS tidak mengompres atau mengenkripsi objek.

  • gzip: OSS menggunakan algoritma kompresi LZ77 yang dibuat oleh Lempel dan Ziv pada tahun 1977 dan 32-bit cyclic redundancy check (CRC) untuk mengenkripsi objek.

  • compress: OSS menggunakan algoritma kompresi Lempel–Ziv–Welch (LZW) untuk mengenkripsi objek.

  • deflate: OSS menggunakan pustaka zlib dan algoritma deflate untuk mengenkripsi objek.

  • br: OSS menggunakan algoritma Brotli untuk mengenkripsi objek.

Untuk informasi lebih lanjut tentang Content-Encoding, lihat RFC 2616.

Penting

Jika Anda ingin halaman web statis, seperti HTML, JavaScript, XML, dan objek JSON, dikompres menjadi objek GZIP saat Anda mengakses objek tersebut, Anda harus membiarkan header ini kosong dan menambahkan header Accept-Encoding: gzip ke dalam permintaan Anda.

Content-Language

Bahasa konten objek. Sebagai contoh, jika konten objek ditulis dalam bahasa Mandarin sederhana, Anda dapat mengatur header ini ke zh-CN.

Content-Disposition

Metode yang digunakan untuk menampilkan objek. Nilai valid:

  • Content-Disposition:inline: Objek ditampilkan di browser untuk pratinjau konten.

  • Content-Disposition:attachment: Objek diunduh ke jalur unduhan yang ditentukan di browser dengan nama objek asli.

  • Content-Disposition:attachment; filename="yourFileName": Objek diunduh ke jalur unduhan yang ditentukan di browser dengan nama objek kustom.

    yourFileName menentukan nama kustom dari objek yang diunduh, seperti example.jpg.

Jika Anda ingin mengunduh objek ke jalur unduhan yang ditentukan di browser, perhatikan item berikut:

Catatan
  • Jika nama objek berisi karakter khusus seperti asterisk (*) atau garis miring (/), nama objek yang diunduh mungkin diloloskan. Sebagai contoh, jika Anda mengunduh example*.jpg ke komputer lokal Anda, example*.jpg mungkin diloloskan menjadi example_.jpg.

  • Untuk mencegah unduhan objek dengan karakter Cina yang termasuk dalam nama objek membuat file lokal dengan karakter acak dalam nama file, Anda harus meng-enkode URL karakter Cina dalam nama objek. Sebagai contoh, untuk memastikan bahwa objek Test.txt di OSS diunduh sebagai file lokal yang memiliki nama objek asli Test.txt, Anda harus mengatur header Content-Disposition ke attachment;filename=%E6%B5%8B%E8%AF%95.txt;filename*=UTF-8''%E6%B5%8B%E8%AF%95.txt, yang berasal dari "attachment;filename="+URLEncoder.encode("Test","UTF-8")+".txt;filename*=UTF-8''"+URLEncoder.encode("Test","UTF-8")+".txt".

Apakah sebuah objek dipratinjau atau diunduh sebagai lampiran ketika objek diakses menggunakan URL objek ditentukan oleh waktu pembuatan bucket tempat objek disimpan, waktu aktivasi OSS, dan jenis domain. Untuk informasi lebih lanjut, lihat Apa yang harus saya lakukan jika objek gambar diunduh sebagai lampiran tetapi tidak dapat dipratinjau saat saya mengakses objek gambar menggunakan URL-nya?

Cache-Control

Catatan

Jika Cache-Control tidak diatur, OSS tidak akan mengembalikan bidang ini dalam header respons, yaitu bidang Cache-Control tidak ada. Pada titik ini, perilaku caching objek akan ditentukan oleh kebijakan caching browser itu sendiri.

Perilaku caching objek. Nilai valid:

  • no-cache: Konten yang di-cache tidak dapat digunakan langsung. Konten yang di-cache harus divalidasi dengan server untuk memeriksa apakah konten objek diperbarui. Jika konten objek diperbarui, konten yang di-cache kedaluwarsa dan objek diunduh lagi dari server. Jika konten objek tidak diperbarui, cache tidak kedaluwarsa, dan objek langsung tersedia dari cache.

  • no-store: Semua konten objek tidak di-cache.

  • public: Semua konten objek di-cache.

  • private: Semua konten objek hanya di-cache di klien.

  • max-age=<seconds>: periode validitas konten yang di-cache. Unit: detik. Opsi ini hanya tersedia di HTTP 1.1.

Expires

Waktu kedaluwarsa cache dalam UTC. Contoh: 2022-10-12T00:00:00.000Z. Jika max-age=<seconds> termasuk dalam pengaturan header Cache-Control, max-age=<seconds> memiliki prioritas lebih tinggi daripada nilai Expires.

Last-Modified

Waktu terakhir objek dimodifikasi. Header Last-Modified secara otomatis diperbarui oleh OSS untuk kontrol cache, sinkronisasi, dan manajemen data. Nilai header ini dalam UTC dan tidak dapat diubah secara manual. Untuk informasi lebih lanjut, lihat Operasi apa yang memengaruhi atribut LastModified objek OSS?

Catatan

Waktu pembaruan objek yang ditampilkan di konsol OSS adalah waktu lokal yang dikonversi dari waktu UTC untuk tampilan waktu yang konsisten. Sebagai contoh, jika objek terakhir diperbarui pada 13:31:54 tanggal 28 Februari 2024 dalam UTC dan Anda memeriksa objek di zona waktu UTC+8, waktu pembaruan objek yang Anda lihat di konsol OSS adalah 21:31:54, 28 Februari 2024.

Content-Length

Ukuran objek. Unit: byte.

Metadata pengguna

Saat mengunggah objek, Anda dapat menambahkan metadata pengguna untuk mengidentifikasi tujuan atau atribut objek.

  • Anda dapat mengonfigurasi beberapa header metadata pengguna untuk objek. Namun, ukuran total metadata pengguna tidak boleh melebihi 8 KB.

  • Metadata pengguna adalah serangkaian pasangan kunci-nilai. Nama header metadata pengguna harus dimulai dengan x-oss-meta-. Sebagai contoh, x-oss-meta-last-modified:20210506 menunjukkan bahwa file lokal terakhir dimodifikasi pada 6 Mei 2021.

  • Saat memanggil operasi GetObject atau operasi HeadObject, metadata pengguna objek dikembalikan sebagai header HTTP.

Prosedur

Gunakan konsol OSS

Anda dapat mengonfigurasi metadata objek hingga 100 objek sekaligus menggunakan konsol OSS.

  1. Masuk ke konsol OSS.

  2. Di panel navigasi kiri, klik Buckets. Di halaman Buckets, temukan dan klik bucket yang diinginkan.

  3. Di pohon navigasi kiri, pilih Object Management > Objects.

  4. Konfigurasikan header HTTP standar dan metadata pengguna.

    • Konfigurasikan header HTTP untuk beberapa objek sekaligus

      Pilih objek yang ingin Anda konfigurasikan metadata-nya dan klik Set Object Metadata.

    • Konfigurasikan header HTTP untuk satu objek

      Temukan objek dalam daftar objek dan pilih more > Set Object Metadata.

  5. Klik OK.

Gunakan ossbrowser

Anda dapat menggunakan ossbrowser untuk melakukan operasi tingkat objek yang sama seperti yang dapat Anda lakukan di konsol OSS. Ikuti petunjuk di layar di ossbrowser untuk mengonfigurasi metadata objek. Untuk informasi lebih lanjut tentang cara menggunakan ossbrowser, lihat Operasi umum.

Gunakan SDK OSS

Kode sampel berikut memberikan contoh tentang cara mengonfigurasi metadata objek menggunakan SDK OSS untuk bahasa pemrograman umum. Untuk informasi lebih lanjut tentang cara mengonfigurasi metadata objek menggunakan SDK OSS untuk bahasa pemrograman lainnya, lihat Ikhtisar.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.common.utils.BinaryUtil;
import com.aliyun.oss.common.utils.DateUtil;
import com.aliyun.oss.model.ObjectMetadata;
import java.io.ByteArrayInputStream;

public class Demo {
    public static void main(String[] args) throws Exception {
        // Dalam contoh ini, endpoint wilayah China (Hangzhou) digunakan. Tentukan endpoint aktual Anda.
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, 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";
        // Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: testfolder/exampleobject.txt.
        String objectName = "testfolder/exampleobject.txt";
        String content = "Halo OSS";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instance OSSClient.
        // Panggil metode shutdown untuk melepaskan sumber daya terkait saat OSSClient tidak lagi digunakan.
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);        
        OSS ossClient = OSSClientBuilder.create()
        .endpoint(endpoint)
        .credentialsProvider(credentialsProvider)
        .clientConfiguration(clientBuilderConfiguration)
        .region(region)               
        .build();

        try {
            // Tambahkan metadata untuk objek yang diunggah.
            ObjectMetadata meta = new ObjectMetadata();

            String md5 = BinaryUtil.toBase64String(BinaryUtil.calculateMd5(content.getBytes()));
            // Aktifkan verifikasi MD5. Setelah verifikasi MD5 diaktifkan, OSS menghitung hash MD5 dari objek yang diunggah dan membandingkan hash MD5 ini dengan yang ditentukan dalam permintaan. Jika kedua nilai berbeda, kesalahan dilaporkan.
            meta.setContentMD5(md5);
            // Tentukan tipe konten yang akan diunggah. Browser menentukan format dan tipe enkode yang digunakan untuk membaca objek berdasarkan tipe konten objek. Jika tipe konten tidak ditentukan, tipe konten dihasilkan berdasarkan ekstensi nama objek. Jika tidak ada ekstensi yang tersedia, nilai default application/octet-stream digunakan sebagai tipe konten.
            meta.setContentType("text/plain; charset=utf-8");
            // Konfigurasikan header. Sebagai contoh, tentukan kelas penyimpanan untuk file yang diunggah.
            meta.setHeader("x-oss-storage-class", StorageClass.Standard);
            
            // Untuk mengaktifkan konfigurasi berikut sesuai kebutuhan, hapus komentar pada baris yang sesuai.
            
            // Tentukan nama untuk objek saat konten diunduh.
            // meta.setContentDisposition("attachment; filename=\"DownloadFilename\"");
            // Tentukan panjang objek yang akan diunggah. Jika panjang objek aktual lebih besar dari panjang yang ditentukan, objek dipotong. Hanya konten dengan panjang yang ditentukan yang diunggah. Jika panjang objek aktual lebih kecil dari panjang yang ditentukan, semua konten objek diunggah.
            // meta.setContentLength(content.length());
            // Tentukan perilaku caching halaman web saat konten diunduh.
            // meta.setCacheControl("Download Action");
            // Tentukan waktu kedaluwarsa cache dalam UTC.
            // meta.setExpirationTime(DateUtil.parseIso8601Date("2022-10-12T00:00:00.000Z"));
            // Tentukan format enkode konten saat konten diunduh.
            // meta.setContentEncoding("gzip");

            // Unggah objek.
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()), meta);
        } catch (OSSException oe) {
            System.out.println("Tangkap OSSException, yang berarti permintaan Anda sampai ke OSS, "
                    + "tetapi ditolak dengan respons kesalahan karena alasan tertentu.");
            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();
            }
        }
    }
}
<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}

use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;
use OSS\CoreOssException;

// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
$provider = new EnvironmentVariableCredentialsProvider();
// Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Tentukan nama bucket. Contoh: examplebucket.
$bucket= "examplebucket";
// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt.
$object = "exampledir/exampleobject.txt";
$content = file_get_contents(__FILE__);
$options = array(
    OssClient::OSS_HEADERS => array(
        'Expires' => '2012-10-01 08:00:00',
        'Content-Disposition' => 'attachment; filename="xxxxxx"',
        'x-oss-meta-self-define-title' => 'info metadata yang ditentukan pengguna',
    ));
try{
    $config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        "region"=> "cn-hangzhou"
    );
    $ossClient = new OssClient($config);
    // Konfigurasikan metadata objek saat Anda mengunggah objek.
    $ossClient->putObject($bucket, $object, $content, $options);
} catch(OssException $e) {
    printf(__FUNCTION__ . ": GAGAL\n");
    printf($e->getMessage() . "\n");
    return;
}
print(__FUNCTION__ . ": OK" . "\n");
            
const OSS = require('ali-oss');

const client = new OSS({
  // Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke oss-cn-hangzhou.
  region: 'yourRegion',
  // Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
  accessKeyId: process.env.OSS_ACCESS_KEY_ID,
  accessKeySecret: process.env.OSS_ACCESS_KEY_SECRET,
  // Tentukan nama bucket.
  bucket: 'examplebucket'
});

async function put() {
  try {
    let meta = { year: 2016, people: 'mary' };
    let result = await client.put('object-name', path.normalize('D:\\localpath\\examplefile.txt'), meta);
  console.log(result);
  } catch (e) {
    console.log(e);
  }
}

put();
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())

# Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"

# Tentukan ID wilayah yang sesuai dengan endpoint. Contoh: cn-hangzhou. Parameter ini diperlukan jika Anda menggunakan algoritma tanda tangan V4.
region = "cn-hangzhou"

# Tentukan nama bucket Anda.
bucket = oss2.Bucket(auth, endpoint, "yourBucketName", region=region)

# Tentukan jalur lengkap objek. Contoh: exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam jalur lengkap.
object_name = 'exampledir/exampleobject.txt'
# Tentukan string yang ingin Anda unggah.
content = '{"age": 1}'
# Konfigurasikan header HTTP. Sebagai contoh, atur header Content-Type ke 'application/json; charset=utf-8'.
bucket.put_object(object_name, content, headers={'Content-Type': 'application/json; charset=utf-8'})
using Aliyun.OSS;
using Aliyun.OSS.Common;
using Aliyun.OSS.Util;

// Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
var endpoint = "yourEndpoint";
// Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
var accessKeyId = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_ID");
var accessKeySecret = Environment.GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET");
// Tentukan nama bucket.
var bucketName = "examplebucket";
// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap.
var objectName = "exampleobject.txt";
// Tentukan jalur lengkap objek lokal yang ingin Anda unggah. Secara default, jika Anda tidak menentukan jalur lengkap objek lokal, objek lokal diunggah dari jalur proyek tempat program sampel berada.
var localFilename = "D:\\localpath\\examplefile.txt";
// Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou.
const string region = "cn-hangzhou";

// Buat instance ClientConfiguration dan modifikasi parameter default berdasarkan kebutuhan Anda.
var conf = new ClientConfiguration();

// Gunakan algoritma tanda tangan V4.
conf.SignatureVersion = SignatureVersion.V4;

// Buat instance OSSClient.
var client = new OssClient(endpoint, accessKeyId, accessKeySecret, conf);
    client.SetRegion(region);
    try
    {
        using (var fs = File.Open(localFilename, FileMode.Open))
        {
            // Buat metadata untuk objek. Anda dapat mengonfigurasi header HTTP untuk objek.
            var metadata = new ObjectMetadata()
            {
                // Tentukan tipe konten objek.
                ContentType = "text/html",
                // Tentukan waktu kedaluwarsa cache dalam UTC.
                ExpirationTime = DateTime.Parse("2025-10-12T00:00:00.000Z"),
            };
            // Tentukan panjang konten objek yang akan diunggah. Jika panjang objek aktual lebih besar dari panjang yang ditentukan, objek dipotong. Hanya konten dengan panjang yang ditentukan yang diunggah. Jika panjang objek aktual lebih kecil dari panjang yang ditentukan, semua konten objek diunggah.
            metadata.ContentLength = fs.Length;
            // Tentukan perilaku caching halaman web saat objek diunduh.
            metadata.CacheControl = "No-Cache";
            // Atur mykey1 ke myval1.
            metadata.UserMetadata.Add("mykey1", "myval1");
            // Atur mykey2 ke myval2.
            metadata.UserMetadata.Add("mykey2", "myval2");
            var saveAsFilename = "Filetest123.txt";
            var contentDisposition = string.Format("attachment;filename*=utf-8''{0}", HttpUtils.EncodeUri(saveAsFilename, "utf-8"));
            // Tentukan nama objek default saat konten yang diperlukan disimpan sebagai objek.
            metadata.ContentDisposition = contentDisposition;
            // Unggah objek dan konfigurasikan metadata objek.
            client.PutObject(bucketName, objectName, fs, metadata);
            Console.WriteLine("Unggah objek berhasil");
            // Kueri metadata objek.
            var oldMeta = client.GetObjectMetadata(bucketName, objectName);
            // Konfigurasikan metadata objek baru.
            var newMeta = new ObjectMetadata()
            {
                ContentType = "application/octet-stream",
                ExpirationTime = DateTime.Parse("2035-11-11T00:00:00.000Z"),
                // Tentukan format enkode konten objek saat objek diunduh.
                ContentEncoding = null,
                CacheControl = ""
            };
            // Konfigurasikan metadata pengguna.
            newMeta.UserMetadata.Add("author", "oss");
            newMeta.UserMetadata.Add("flag", "my-flag");
            newMeta.UserMetadata.Add("mykey2", "myval2-modified-value");
            // Gunakan metode ModifyObjectMeta untuk memodifikasi metadata objek.
            client.ModifyObjectMeta(bucketName, objectName, newMeta);
        }
    }
    catch (Exception ex)
    {
        Console.WriteLine("Unggah objek gagal, {0}", ex.Message);
    }
}
// Buat permintaan untuk menanyakan metadata objek secara sinkron.
// Tentukan nama bucket dan jalur lengkap objek. Dalam contoh ini, nama bucket adalah examplebucket dan jalur lengkap objek adalah exampledir/exampleobject.txt. Jangan sertakan nama bucket dalam jalur lengkap objek.
HeadObjectRequest head = new HeadObjectRequest("examplebucket", "exampledir/exampleobject.txt");

// Tanyakan metadata objek.
OSSAsyncTask task = oss.asyncHeadObject(head, new OSSCompletedCallback<HeadObjectRequest, HeadObjectResult>() {
    @Override
    public void onSuccess(HeadObjectRequest request, HeadObjectResult result) {
    
    // Dapatkan panjang objek.
        Log.d("headObject", "Ukuran Objek: " + result.getMetadata().getContentLength()); 
    // Tanyakan tipe objek.
        Log.d("headObject", "Tipe Konten Objek: " + result.getMetadata().getContentType()); 
    }

    @Override
    public void onFailure(HeadObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // Tangani pengecualian permintaan.
        if (clientExcepion != null) {
            // Tangani pengecualian klien, seperti pengecualian jaringan.
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            // Tangani pengecualian layanan.
            Log.e("Kode Kesalahan", serviceException.getErrorCode());
            Log.e("ID Permintaan", serviceException.getRequestId());
            Log.e("ID Host", serviceException.getHostId());
            Log.e("Pesan Mentah", serviceException.getRawMessage());
        }
    }
});

// task.waitUntilFinished(); // Tunggu hingga metadata objek ditanyakan.
OSSHeadObjectRequest * request = [OSSHeadObjectRequest new];
// Tentukan nama bucket. Contoh: examplebucket.
request.bucketName = @"examplebucket";
// Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap. Contoh: exampledir/exampleobject.txt.
request.objectKey = @"exampledir/exampleobject.txt";

OSSTask * headTask = [client headObject:request];

[headTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        NSLog(@"permintaan metadata objek berhasil!");
        OSSHeadObjectResult * result = task.result;
        NSLog(@"bidang header: %@", result.httpResponseHeaderFields);
        for (NSString * key in result.objectMeta) {
            NSLog(@"ObjectMeta: %@ - %@", key, [result.objectMeta objectForKey:key]);
        }
    } else {
        NSLog(@"permintaan metadata objek gagal, error: %@" ,task.error);
    }
    return nil;
}];
#include <alibabacloud/oss/OssClient.h>
using namespace AlibabaCloud::OSS;

int main(void)
{

    /* Inisialisasi informasi tentang akun yang digunakan untuk mengakses OSS. */
    
    /* Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
    std::string Endpoint = "yourEndpoint";
    /* Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
    std::string Region = "yourRegion";
    /* Tentukan nama bucket. Contoh: examplebucket. */
    std::string BucketName = "examplebucket";
    /* Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap objek. Contoh: exampledir/exampleobject.txt. */
    std::string ObjectName = "exampledir/exampleobject.txt";

    /* Inisialisasi sumber daya seperti sumber daya jaringan. */
    InitializeSdk();
  
    ClientConfiguration conf;
    conf.signatureVersion = SignatureVersionType::V4;
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    auto credentialsProvider = std::make_shared<EnvironmentVariableCredentialsProvider>();
    OssClient client(Endpoint, credentialsProvider, conf);
    client.SetRegion(Region);

    /* Konfigurasikan header HTTP. */
    auto meta = ObjectMetaData();
    meta.setContentType("text/plain");
    meta.setCacheControl("max-age=3");
    /* Konfigurasikan metadata pengguna objek. */
    meta.UserMetaData()["meta"] = "meta-value";

    std::shared_ptr<std::iostream> content = std::make_shared<std::stringstream>();
    *content << "Terima kasih telah menggunakan Aliyun Object Storage Service!";
    auto outcome = client.PutObject(BucketName, ObjectName, content, meta);

    if (!outcome.isSuccess()) {
        /* Tangani pengecualian. */
        std::cout << "PutObject gagal" <<
        ",code:" << outcome.error().Code() <<
        ",message:" << outcome.error().Message() <<
        ",requestId:" << outcome.error().RequestId() << std::endl;
        return -1;
    }

    /* Lepaskan sumber daya, seperti sumber daya jaringan. */
    ShutdownSdk();
    return 0;
}
#include "oss_api.h"
#include "aos_http_io.h"
/* Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com. */
const char *endpoint = "yourEndpoint";
/* Tentukan nama bucket. Contoh: examplebucket. */
const char *bucket_name = "examplebucket";
/* Tentukan jalur lengkap objek. Jangan sertakan nama bucket dalam jalur lengkap objek. Contoh: exampledir/exampleobject.txt. */
const char *object_name = "exampledir/exampleobject.txt";
const char *object_content= "halo dunia";
/* Tentukan wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur wilayah ke cn-hangzhou. */
const char *region = "yourRegion";
void init_options(oss_request_options_t *options)
{
    options->config = oss_config_create(options->pool);
    /* Gunakan string char* untuk menginisialisasi aos_string_t. */
    aos_str_set(&options->config->endpoint, endpoint);
    /* Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode sampel, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi. */
    aos_str_set(&options->config->access_key_id, getenv("OSS_ACCESS_KEY_ID"));
    aos_str_set(&options->config->access_key_secret, getenv("OSS_ACCESS_KEY_SECRET"));
    // Tentukan dua parameter tambahan.
    aos_str_set(&options->config->region, region);
    options->config->signature_version = 4;
    /* Tentukan apakah menggunakan CNAME. Nilai 0 menunjukkan bahwa CNAME tidak digunakan. */
    options->config->is_cname = 0;
    /* Tentukan parameter jaringan, seperti periode timeout. */
    options->ctl = aos_http_controller_create(options->pool, 0);
}
int main(int argc, char *argv[])
{
    /* Panggil metode aos_http_io_initialize di main() untuk menginisialisasi sumber daya global, seperti sumber daya jaringan dan memori. */
    if (aos_http_io_initialize(NULL, 0) != AOSE_OK) {
        exit(1);
    }
    /* Buat kolam memori untuk mengelola memori. aos_pool_t setara dengan apr_pool_t. Kode yang digunakan untuk membuat kolam memori termasuk dalam pustaka APR. */
    aos_pool_t *pool;
    /* Buat kolam memori. Nilai parameter kedua adalah NULL. Nilai ini menentukan bahwa kolam tidak mewarisi kolam memori lainnya. */
    aos_pool_create(&pool, NULL);
    /* Buat dan inisialisasi opsi. Parameter ini menentukan informasi konfigurasi global seperti endpoint, access_key_id, access_key_secret, is_cname, dan curl. */
    oss_request_options_t *oss_client_options;
    /* Alokasikan sumber daya memori di kolam memori untuk opsi. */
    oss_client_options = oss_request_options_create(pool);
    /* Inisialisasi oss_client_options. */
    init_options(oss_client_options);
    /* Inisialisasi parameter. */
    aos_string_t bucket;
    aos_string_t object;
    aos_table_t *headers;
    aos_list_t buffer;
    aos_table_t *resp_headers = NULL; 
    aos_status_t *resp_status = NULL; 
    aos_buf_t *content = NULL;
    char *content_length_str = NULL;
    char *object_type = NULL;
    char *object_author = NULL;
    int64_t content_length = 0;
    aos_str_set(&bucket, bucket_name);
    aos_str_set(&object, object_name);
    headers = aos_table_make(pool, 2);
    /* Konfigurasikan metadata pengguna. */
    apr_table_set(headers, "Expires", "Fri, 28 Feb 2032 05:38:42 GMT"); 
    apr_table_set(headers, "x-oss-meta-author", "oss");
    aos_list_init(&buffer);
    content = aos_buf_pack(oss_client_options->pool, object_content, strlen(object_content));
    aos_list_add_tail(&content->node, &buffer);
    /* Unggah objek dari cache. */
    resp_status = oss_put_object_from_buffer(oss_client_options, &bucket, &object, 
               &buffer, headers, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        printf("unggah objek dari buffer dengan md5 berhasil\n");
    } else {
        printf("unggah objek dari buffer dengan md5 gagal\n");
    }
    /* Tanyakan metadata objek. */
    resp_status = oss_get_object_meta(oss_client_options, &bucket, &object, &resp_headers);
    if (aos_status_is_ok(resp_status)) {
        content_length_str = (char*)apr_table_get(resp_headers, OSS_CONTENT_LENGTH);
        if (content_length_str != NULL) {
            content_length = atol(content_length_str);
        }
        object_author = (char*)apr_table_get(resp_headers, OSS_AUTHORIZATION);
        object_type = (char*)apr_table_get(resp_headers, OSS_OBJECT_TYPE);
        printf("dapatkan metadata objek berhasil, author objek:%s, tipe objek:%s, content_length:%ld\n", object_author, object_type, content_length);
    } else {
        printf("req:%s, dapatkan metadata objek gagal\n", resp_status->req_id);
    }
    /* Lepaskan kolam memori. Operasi ini melepaskan sumber daya memori yang dialokasikan untuk permintaan. */
    aos_pool_destroy(pool);
    /* Lepaskan sumber daya global yang dialokasikan. */
    aos_http_io_deinitialize();
    return 0;
}
require 'aliyun/oss'
client = Aliyun::OSS::Client.new(
  # Tentukan endpoint wilayah tempat bucket berada. Sebagai contoh, jika bucket berada di wilayah China (Hangzhou), atur endpoint ke https://oss-cn-hangzhou.aliyuncs.com.
  endpoint: 'https://oss-cn-hangzhou.aliyuncs.com',
  # Dapatkan kredensial akses dari variabel lingkungan. Sebelum menjalankan kode, pastikan variabel lingkungan OSS_ACCESS_KEY_ID dan OSS_ACCESS_KEY_SECRET telah dikonfigurasi.
  access_key_id: ENV['OSS_ACCESS_KEY_ID'],
  access_key_secret: ENV['OSS_ACCESS_KEY_SECRET']
)

# Tentukan nama bucket. Contoh: examplebucket.
bucket = client.get_bucket('examplebucket')

# Konfigurasikan metadata objek selama unggah sederhana.
bucket.put_object(
  'my-object-1',
  :file => 'local-file',
  :metas => {'year' => '2016', 'people' => 'mary'})

# Konfigurasikan metadata objek selama unggah tambahan.
bucket.append_object(
  'my-object-2', 0,
  :file => 'local-file',
  :metas => {'year' => '2016', 'people' => 'mary'})

# Konfigurasikan metadata objek selama unggah berkelanjutan.
bucket.resumable_upload(
  'my-object',
  'local-file',
  :metas => {'year' => '2016', 'people' => 'mary'})          
package main

import (
	"context"
	"flag"
	"log"
	"strings"
	"time"

	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss"
	"github.com/aliyun/alibabacloud-oss-go-sdk-v2/oss/credentials"
)

// Tentukan variabel global.
var (
	region     string // Wilayah tempat bucket berada.
	bucketName string // Nama bucket.
	objectName string // Nama objek.
)

// Tentukan fungsi init yang digunakan untuk menginisialisasi parameter baris perintah.
func init() {
	flag.StringVar(&region, "region", "", "Wilayah tempat bucket berada.")
	flag.StringVar(&bucketName, "bucket", "", "Nama bucket.")
	flag.StringVar(&objectName, "object", "", "Nama objek.")
}

func main() {
	// Parsing parameter baris perintah.
	flag.Parse()

	// Periksa apakah nama bucket ditentukan.
	if len(bucketName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama bucket diperlukan")
	}

	// Periksa apakah wilayah ditentukan.
	if len(region) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, wilayah diperlukan")
	}

	// Periksa apakah nama objek ditentukan.
	if len(objectName) == 0 {
		flag.PrintDefaults()
		log.Fatalf("parameter tidak valid, nama objek diperlukan")
	}

	// Tentukan konten yang ingin Anda unggah.
	content := "hi oss"

	// Muat konfigurasi default dan tentukan penyedia kredensial dan wilayah.
	cfg := oss.LoadDefaultConfig().
		WithCredentialsProvider(credentials.NewEnvironmentVariableCredentialsProvider()).
		WithRegion(region)

	// Buat klien OSS.
	client := oss.NewClient(cfg)

	// Buat permintaan untuk mengunggah objek.
	request := &oss.PutObjectRequest{
		Bucket:  oss.Ptr(bucketName),                                                          // Nama bucket.
		Key:     oss.Ptr(objectName),                                                          // Nama objek.
		Body:    strings.NewReader(content),                                                   // Konten yang akan diunggah.
		Expires: oss.Ptr(time.Date(2038, 12, 31, 12, 0, 0, 0, time.UTC).Format(time.RFC1123)), // Waktu kedaluwarsa objek.
		Acl:     oss.ObjectACLPublicRead,
		Metadata: map[string]string{ // Metadata kustom.
			"Author": "alibaba oss sdk", // Penulis objek.
			"Date":   "2024-07-01",      // Tanggal pembuatan objek.
		},
	}

	// Eksekusi permintaan unggah.
	result, err := client.PutObject(context.TODO(), request)
	if err != nil {
		log.Fatalf("gagal mengunggah objek %v", err)
	}

	// Catat hasilnya.
	log.Printf("hasil unggah objek:%#v\n", result)
}

Gunakan ossutil

Anda dapat menggunakan ossutil untuk mengonfigurasi metadata objek. Untuk informasi lebih lanjut, lihat set-meta (kelola metadata objek).

Gunakan API OSS

Jika bisnis Anda memerlukan tingkat penyesuaian yang tinggi, Anda dapat langsung memanggil API RESTful. Untuk memanggil API secara langsung, Anda harus menyertakan perhitungan tanda tangan dalam kode Anda. Untuk informasi lebih lanjut, lihat PutObject.