全部产品
Search
文档中心

Object Storage Service:Aktifkan bayar-per-permintaan menggunakan Java SDK V1

更新时间:Nov 27, 2025

Dalam mode bayar-per-permintaan, pihak peminta menanggung biaya lalu lintas dan permintaan yang dihasilkan dari akses data dalam bucket, sedangkan pemilik bucket hanya membayar biaya penyimpanan. Fitur ini memungkinkan Anda berbagi data tanpa dikenai biaya untuk lalu lintas dan permintaan yang dihasilkan.

Catatan penggunaan

  • Pada topik ini, digunakan titik akhir publik wilayah China (Hangzhou). Untuk mengakses OSS dari layanan Alibaba Cloud lainnya dalam 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 lebih lanjut 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.

  • Untuk mengaktifkan bayar-per-permintaan, Anda harus memiliki izin oss:PutBucketRequestPayment. Untuk mengambil konfigurasi bayar-per-permintaan, Anda harus memiliki izin oss:GetBucketRequestPayment. Untuk informasi lebih lanjut, lihat Berikan izin kustom kepada RAM user.

Aktifkan bayar-per-permintaan

Kode berikut memberikan contoh cara mengaktifkan bayar-per-permintaan.

import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception{
        // Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan 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 disetel.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket.
        String bucketName = "examplebucket";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Saat instans OSSClient tidak lagi diperlukan, 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 {
            // Aktifkan bayar-per-permintaan.
            Payer payer = Payer.Requester;
            ossClient.setBucketRequestPayment(bucketName, payer);
        } 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 (Throwable ce) {
            System.out.println("Terjadi ClientException, yang berarti client mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "misalnya tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            // Matikan instans OSSClient.
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Dapatkan informasi konfigurasi bayar-per-permintaan

Kode berikut memberikan contoh cara mengambil informasi konfigurasi bayar-per-permintaan.

import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;

public class Demo {
    public static void main(String[] args) throws Exception{
        // Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan 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 disetel.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket.
        String bucketName = "examplebucket";
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Saat instans OSSClient tidak lagi diperlukan, 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 informasi konfigurasi bayar-per-permintaan.
            GetBucketRequestPaymentResult result = ossClient.getBucketRequestPayment(bucketName);
            System.out.println("Payer:" + result.getPayer());
        } 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 (Throwable ce) {
            System.out.println("Terjadi ClientException, yang berarti client mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "misalnya tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            // Matikan instans OSSClient.
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}            

Tentukan pihak ketiga sebagai pembayar untuk akses objek

Saat pihak ketiga melakukan operasi pada objek, permintaan harus menyertakan parameter x-oss-request-payer:requester dalam Header HTTP. Jika tidak, error akan dikembalikan.

Kode berikut menggunakan operasi PutObject, GetObject, dan DeleteObject sebagai contoh untuk menunjukkan cara menentukan pihak ketiga sebagai pembayar untuk akses objek. Metode penentuan pembayar untuk operasi baca dan tulis lainnya pada objek serupa.

Kode berikut memberikan contoh cara menentukan pihak ketiga sebagai pembayar untuk akses objek.

import com.aliyun.oss.ClientBuilderConfiguration;
import com.aliyun.oss.OSS;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.*;
import java.io.ByteArrayInputStream;

public class Demo {
    public static void main(String[] args) throws Exception{
        // Titik akhir wilayah China (Hangzhou) digunakan sebagai contoh. Tentukan titik akhir yang sebenarnya. Untuk informasi lebih lanjut tentang titik akhir wilayah lainnya, lihat Titik Akhir.
        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 disetel.
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Tentukan nama bucket. Contoh: examplebucket.
        String bucketName = "examplebucket";
        // Tentukan path lengkap objek. Contoh: exampledir/exampleobject.txt. Path lengkap tidak boleh menyertakan nama bucket.
        String objectName = "exampledir/exampleobject.txt";
        Payer payer = Payer.Requester;
        // Tentukan wilayah tempat bucket berada. Misalnya, jika bucket berada di wilayah China (Hangzhou), setel Region ke cn-hangzhou.
        String region = "cn-hangzhou";

        // Buat instans OSSClient.
        // Saat instans OSSClient tidak lagi diperlukan, 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 {
            // Tentukan pembayar untuk operasi PutObject.
            String content = "hello";
            PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
            putObjectRequest.setRequestPayer(payer);
            ossClient.putObject(putObjectRequest);

            // Tentukan pembayar untuk operasi GetObject.
            GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectName);
            getObjectRequest.setRequestPayer(payer);
            OSSObject ossObject = ossClient.getObject(getObjectRequest);
            ossObject.close();

            // Tentukan pembayar untuk operasi DeleteObject.
            GenericRequest genericRequest = new GenericRequest(bucketName, objectName);
            genericRequest.setRequestPayer(payer);
            ossClient.deleteObject(genericRequest);
        } 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 (Throwable ce) {
            System.out.println("Terjadi ClientException, yang berarti client mengalami "
                    + "masalah internal serius saat mencoba berkomunikasi dengan OSS, "
                    + "misalnya tidak dapat mengakses jaringan.");
            System.out.println("Pesan Error:" + ce.getMessage());
        } finally {
            // Matikan instans OSSClient.
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

Referensi

  • Untuk kode contoh lengkap yang digunakan untuk mengaktifkan bayar-per-permintaan, lihat contoh GitHub.

  • Untuk informasi lebih lanjut tentang operasi API untuk mengaktifkan bayar-per-permintaan, lihat PutBucketRequestPayment.

  • Untuk informasi lebih lanjut tentang operasi API untuk mengambil informasi konfigurasi bayar-per-permintaan, lihat GetBucketRequestPayment.