全部产品
Search
文档中心

Object Storage Service:Bind nama domain kustom (Java SDK V1)

更新时间:Nov 27, 2025

Setelah Anda mengunggah objek ke bucket, Object Storage Service (OSS) secara otomatis menghasilkan URL untuk mengakses objek tersebut. URL ini berisi titik akhir publik bucket. Untuk mengakses objek melalui nama domain kustom, Anda harus menambahkan record CNAME guna mengikat nama domain kustom ke bucket tempat objek disimpan.

Catatan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). 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 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 menggunakan nama domain kustom atau Security Token Service (STS), lihat Contoh konfigurasi untuk skenario umum.

Buat CnameToken

Kode berikut menunjukkan cara membuat CnameToken.

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

public class Demo {

    public static void main(String[] args) throws Exception {
        // Contoh ini 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 kode ini, 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 nama domain kustom.
        String domain = "www.example.com";
        // Tentukan wilayah tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yang menunjukkan wilayah China (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 {
            // Buat CnameToken.
            CreateBucketCnameTokenRequest request = new CreateBucketCnameTokenRequest(bucketName);
            // Atur nama domain kustom.
            request.setDomain(domain);
            CreateBucketCnameTokenResult result = ossClient.createBucketCnameToken(request);
            // Cetak CNAME yang diikat.
            System.out.println(result.getCname());
            // Cetak CnameToken yang dikembalikan oleh OSS.
            System.out.println(result.getToken());
            // Cetak waktu kedaluwarsa CnameToken.
            System.out.println(result.getExpireTime());
        } 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();
            }
        }
    }
}

Ambil CnameToken

Kode berikut menunjukkan cara mengambil CnameToken.

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

public class Demo {

    public static void main(String[] args) throws Exception {
        // Contoh ini 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 kode ini, 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 nama domain kustom.
        String domain = "www.example.com";
        // Tentukan wilayah tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yang menunjukkan wilayah China (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 {
            // Ambil CnameToken.
            GetBucketCnameTokenRequest request = new GetBucketCnameTokenRequest(bucketName);
            request.setDomain(domain);
            GetBucketCnameTokenResult result = ossClient.getBucketCnameToken(request);
            // Cetak CNAME yang diikat.
            System.out.println(result.getCname());
            // Cetak CnameToken yang dikembalikan oleh OSS.
            System.out.println(result.getToken());
            // Cetak waktu kedaluwarsa CnameToken.
            System.out.println(result.getExpireTime());
        } 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();
            }
        }
    }
}

Tambahkan record CNAME

Kode berikut menunjukkan cara menambahkan record CNAME.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.common.utils.IOUtils;
import com.aliyun.oss.model.AddBucketCnameRequest;
import com.aliyun.oss.model.CertificateConfiguration;
import java.io.FileInputStream;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Contoh ini 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 kode ini, 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 nama domain kustom.
        String domain = "www.example.com";
        // Tentukan path sertifikat.
        String crtPath = "oss/generic.testputcname.com.crt";
        // Tentukan path kunci privat.
        String keyPath = "oss/generic.testputcname.com.key";
        // Tentukan wilayah tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yang menunjukkan wilayah China (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 {            
            String pubKey = IOUtils.readStreamAsString(new FileInputStream(crtPath), "utf8");
            String priKey = IOUtils.readStreamAsString(new FileInputStream(keyPath), "utf8");
            // Tambahkan record CNAME.
            AddBucketCnameRequest request = new AddBucketCnameRequest(bucketName)
                    .withDomain(domain)
                    .withCertificateConfiguration(new CertificateConfiguration()
                            // Atur kunci publik sertifikat.
                            .withPublicKey(pubKey)
                            // Atur kunci privat sertifikat.
                            .withPrivateKey(priKey)
                            /*// Atur ID sertifikat saat ini.
                            .withPreviousId("493****-cn-hangzhou")
                            // Tentukan apakah akan memaksa menimpa sertifikat.
                            .withForceOverwriteCert(false)
                            // Tentukan apakah akan menghapus sertifikat.
                            .withDeleteCertificate(false)*/);
            ossClient.addBucketCname(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();
            }
        }
    }
}

Lihat record CNAME

Kode berikut menunjukkan cara melihat record CNAME suatu bucket.

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.CnameConfiguration;
import java.util.List;

public class Demo {

    public static void main(String[] args) throws Exception {
        // Contoh ini 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 kode ini, 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 wilayah tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yang menunjukkan wilayah China (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 {
            // Dapatkan record CNAME.
            List<CnameConfiguration> cnameConfigurations = ossClient.getBucketCname(bucketName);
            if(cnameConfigurations.get(0) != null){
                // Cetak ID sertifikat.
                System.out.println(cnameConfigurations.get(0).getCertId());
                // Cetak nama domain kustom.
                System.out.println(cnameConfigurations.get(0).getDomain());
                // Cetak sumber sertifikat.
                System.out.println(cnameConfigurations.get(0).getCertType());
                // Cetak status nama domain.
                System.out.println(cnameConfigurations.get(0).getStatus());
                // Cetak status sertifikat.
                System.out.println(cnameConfigurations.get(0).getCertStatus());
                // Cetak waktu saat nama domain kustom diikat.
                System.out.println(cnameConfigurations.get(0).getLastMofiedTime());
            }
        } 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();
            }
        }
    }
}

Hapus record CNAME

Kode berikut menunjukkan cara menghapus record CNAME.

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

public class Demo {

    public static void main(String[] args) throws Exception {
        // Contoh ini 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 kode ini, 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 nama domain kustom.
        String domain = "www.example.com";
        // Tentukan wilayah tempat bucket berada. Contoh ini menggunakan cn-hangzhou, yang menunjukkan wilayah China (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 {
            // Hapus record CNAME.
            ossClient.deleteBucketCname(bucketName, domain);
        } 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 informasi selengkapnya tentang operasi API untuk membuat CnameToken guna verifikasi kepemilikan domain, lihat CreateCnameToken.

  • Untuk informasi selengkapnya tentang operasi API untuk mengambil CnameToken, lihat GetCnameToken.

  • Untuk informasi selengkapnya tentang operasi API untuk menambahkan record CNAME, lihat PutCname.

  • Untuk informasi selengkapnya tentang operasi API untuk melihat record CNAME, lihat ListCname.

  • Untuk informasi selengkapnya tentang operasi API untuk menghapus record CNAME, lihat DeleteCname.