全部产品
Search
文档中心

Object Storage Service:OSS SDK for Java 2.0 (preview)

更新时间:Mar 04, 2026

OSS SDK for Java 2.0 memungkinkan Anda mengintegrasikan Alibaba Cloud Object Storage Service (OSS) ke dalam aplikasi Java. SDK ini dapat digunakan untuk mengunggah, mengunduh, dan mengelola file, serta ideal bagi pengembang dan perusahaan yang memerlukan penyimpanan file berbasis cloud.

Github | OSS SDK for Java API | mvnrepository | deepwiki

Integrasi cepat

Ikuti langkah-langkah berikut untuk mengintegrasikan OSS SDK for Java 2.0.

image

Prasyarat

Java 8 atau versi yang lebih baru.

Anda dapat menjalankan perintah java -version untuk memeriksa versi Java Anda. Jika Java belum terinstal atau versinya lebih lama dari Java 8, Anda dapat mengunduh dan menginstal Java.

Instal SDK

Anda dapat menggunakan Maven untuk menginstal OSS SDK for Java 2.0.

Maven

Tambahkan dependensi berikut ke file pom.xml Anda. Ganti <version> dengan nomor versi terbaru dari Maven Repository.

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibabacloud-oss-v2</artifactId>
    <version><!-- Specify the latest version number--></version>
</dependency>

Kode sumber

Anda dapat memperoleh versi terbaru OSS SDK for Java 2.0 dari Github, lalu membangun dan menginstalnya menggunakan Maven.

mvn clean install -DskipTests -Dgpg.skip=true

Konfigurasikan kredensial akses

Anda dapat mengonfigurasi kredensial akses dengan menyetel variabel lingkungan menggunakan Pasangan Kunci Akses (AccessKey pair) dari Pengguna RAM.

Di Konsol RAM, buat Pengguna RAM dengan akses Permanent AccessKey Pair. Simpan Pasangan Kunci Akses tersebut, lalu berikan izin AliyunOSSFullAccess kepada pengguna tersebut.

Linux

  1. Jalankan perintah berikut di antarmuka baris perintah untuk menambahkan pengaturan variabel lingkungan ke file ~/.bashrc.

    echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
    echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
    1. Jalankan perintah berikut untuk menerapkan perubahan.

      source ~/.bashrc
    2. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

macOS

  1. Jalankan perintah berikut di terminal untuk memeriksa jenis shell default.

    echo $SHELL
    1. Ikuti langkah-langkah sesuai jenis shell default Anda.

      Zsh

      1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.zshrc.

        echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
        echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
      2. Jalankan perintah berikut untuk menerapkan perubahan.

        source ~/.zshrc
      3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

      Bash

      1. Jalankan perintah berikut untuk menambahkan pengaturan variabel lingkungan ke file ~/.bash_profile.

        echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bash_profile
        echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bash_profile
      2. Jalankan perintah berikut untuk menerapkan perubahan.

        source ~/.bash_profile
      3. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

Windows

CMD

  1. Jalankan perintah berikut di Command Prompt.

    setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
    setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
    1. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      echo %OSS_ACCESS_KEY_ID%
      echo %OSS_ACCESS_KEY_SECRET%

PowerShell

  1. Jalankan perintah berikut di PowerShell.

    [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
    [Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
    1. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
      [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

Inisialisasi klien

Penting

Karena adanya perubahan kebijakan untuk meningkatkan kepatuhan dan keamanan, mulai 20 Maret 2025, pengguna OSS baru harus menggunakan nama domain kustom (CNAME) untuk melakukan operasi API data pada bucket OSS yang berada di wilayah Tiongkok Daratan. Titik akhir publik default dibatasi untuk operasi ini. Lihat pengumuman resmi untuk daftar lengkap operasi yang terdampak. Jika Anda mengakses data melalui HTTPS, Anda harus mengikat Sertifikat SSL yang valid ke domain kustom Anda. Ini wajib untuk akses Konsol OSS, karena konsol menerapkan HTTPS.

  • OSSClient mengimplementasikan AutoCloseable. Jika Anda membuat instans menggunakan pernyataan try-with-resources, sumber daya akan dilepas secara otomatis tanpa perlu memanggil close() secara manual.

  • Membuat dan menghancurkan instans OSSClient merupakan operasi yang memakan waktu. Kami menyarankan agar Anda menggunakan pola singleton untuk menggunakan kembali instans OSSClient. Jika menggunakan pola ini, Anda harus memanggil close() secara manual sebelum aplikasi dihentikan guna mencegah kebocoran sumber daya.

    Pola singleton

    Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
    public class OssClientSingleton {
        private OssClientSingleton() {}
    
        private static class Holder {
            private static final OSSClient INSTANCE = OSSClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region("<region-id>")
                .build();
        }
    
        public static OSSClient getInstance() {
            return Holder.INSTANCE;
        }
    
        // Tutup instans OSSClient. Ini harus dipanggil secara eksplisit.
        public static void shutdown() {
            try {
                getInstance().close();
            } catch (Exception e) {
                // Tangani pengecualian saat menutup.
            }
        }
    }
    

Sinkronisasi OSSClient

Gunakan OSSClient sinkron jika Anda ingin menunggu hingga suatu operasi selesai sebelum melanjutkan.

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.OSSClientBuilder;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.exceptions.ServiceException;
import com.aliyun.sdk.service.oss2.models.*;
import com.aliyun.sdk.service.oss2.paginator.ListBucketsIterable;

public class Example {
    public static void main(String[] args) {
        String region = "<region-id>";

        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();
        OSSClientBuilder clientBuilder = OSSClient.newBuilder()
                .credentialsProvider(provider)
                .region(region);

        try (OSSClient client = clientBuilder.build()) {

            ListBucketsIterable paginator = client.listBucketsPaginator(
                    ListBucketsRequest.newBuilder()
                            .build());

            for (ListBucketsResult result : paginator) {
                for (BucketSummary info : result.buckets()) {
                    System.out.printf("bucket: name:%s, region:%s, storageClass:%s\n", info.name(), info.region(), info.storageClass());
                }
            }

        } catch (Exception e) {
//            ServiceException se = ServiceException.asCause(e);
//            if (se != null) {
//                System.out.printf("ServiceException: requestId:%s, errorCode:%s\n", se.requestId(), se.errorCode());
//            }
            System.out.printf("error:\n%s", e);
        }
    }
}

OSSClient asinkron

Gunakan OSSClient asinkron jika Anda ingin memproses beberapa operasi OSS secara bersamaan tanpa menunggu hasil setiap operasi.

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSAsyncClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;
import com.aliyun.sdk.service.oss2.exceptions.ServiceException;
import com.aliyun.sdk.service.oss2.models.*;

import java.util.concurrent.CompletableFuture;

public class ExampleAsync {
    public static void main(String[] args) {
        String region = "<region-id>";
        CredentialsProvider provider = new EnvironmentVariableCredentialsProvider();

        try (OSSAsyncClient client = OSSAsyncClient.newBuilder()
                .region(region)
                .credentialsProvider(provider)
                .build()) {

            CompletableFuture<ListBucketsResult> future = client.listBucketsAsync(
                    ListBucketsRequest.newBuilder().build()
            );

            future.thenAccept(result -> {
                        for (BucketSummary info : result.buckets()) {
                            System.out.printf("bucket: name:%s, region:%s, storageClass:%s\n",
                                    info.name(), info.region(), info.storageClass());
                        }
                    })
                    .exceptionally(e -> {
//                ServiceException se = ServiceException.asCause(e);
//                if (se != null) {
//                    System.out.printf("Async ServiceException: requestId:%s, errorCode:%s\n",
//                            se.requestId(), se.errorCode());
//                }
                        System.out.printf("async error:\n%s\n", e);
                        return null;
                    });

            future.join();

        } catch (Exception e) {
            System.out.printf("main error:\n%s\n", e);
        }
    }
}

Setelah menjalankan kode, bucket di semua wilayah yang terkait dengan akun Anda akan ditampilkan.

Konfigurasi klien

Konfigurasi klien yang didukung

Nama parameter

Deskripsi

region

(Wajib) Wilayah tempat permintaan dikirim.

credentialsProvider

(Wajib) Atur kredensial akses.

endpoint

Titik akhir

httpClient

Klien HTTP.

retryMaxAttempts

Jumlah maksimum upaya pengulangan untuk permintaan HTTP. Nilai default adalah 3.

retryer

Implementasi pengulangan untuk permintaan HTTP.

connectTimeout

Waktu tunggu untuk membangun koneksi. Nilai default adalah 5 detik.

readWriteTimeout

Waktu tunggu untuk membaca dan menulis data. Nilai default adalah 20 detik.

insecureSkipVerify

Melewati verifikasi sertifikat SSL. Secara default, sertifikat SSL diverifikasi.

enabledRedirect

Mengaktifkan pengalihan HTTP. Secara default, fitur ini dinonaktifkan.

signatureVersion

Versi signature. Nilai default adalah v4.

disableSsl

Secara default, permintaan dikirim melalui HTTPS.

usePathStyle

Permintaan bergaya path, juga dikenal sebagai gaya permintaan domain tingkat kedua, digunakan secara default dengan nama domain yang di-host oleh bucket.

useCName

Menggunakan nama domain kustom untuk akses. Secara default, ini bernilai false.

useDualStackEndpoint

Menggunakan titik akhir dual-stack untuk akses. Secara default, ini bernilai false.

useAccelerateEndpoint

Menggunakan titik akhir akselerasi transfer untuk akses. Secara default, ini bernilai false.

useInternalEndpoint

Menentukan apakah akan menggunakan titik akhir internal dalam satu wilayah untuk akses. Opsi ini dinonaktifkan secara default.

additionalHeaders

Header permintaan tambahan untuk ditandatangani. Ini berlaku untuk signature V4.

userAgent

Informasi User-Agent tambahan.

Gunakan nama domain kustom

Jika Anda menggunakan nama domain OSS default untuk akses, Anda mungkin mengalami masalah seperti file tidak dapat diakses atau gagal dipratinjau. Dengan menggunakan nama domain kustom untuk mengakses OSS, Anda dapat langsung mempratinjau file di browser dan menggunakan CDN untuk pengiriman konten yang dipercepat.

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada.
        String region = "<region-id>";

        // Tentukan nama domain kustom Anda. Misalnya, www.example-***.com.
        String endpoint = "https://www.example-***.com";

        // Buat klien OSS dengan informasi yang telah dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                // Catatan: Setel useCName ke true untuk mengaktifkan opsi CNAME. Jika tidak, Anda tidak dapat menggunakan nama domain kustom.
                .useCName(true)
                .build()) {

            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

Kontrol waktu tunggu

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;
import java.time.Duration;

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada.
        String region = "<region-id>";

        // Buat klien OSS dengan informasi yang telah dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                // Atur waktu tunggu untuk membangun koneksi. Nilai default adalah 5 detik.
                .connectTimeout(Duration.ofSeconds(30))
                // Atur waktu tunggu untuk membaca dan menulis data. Nilai default adalah 20 detik.
                .readWriteTimeout(Duration.ofSeconds(30))
                .build()) {

            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

Kebijakan pengulangan

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;
import com.aliyun.sdk.service.oss2.retry.*;
import java.time.Duration;

public class Example {
    public static void main(String[] args) {
        /*
         * Deskripsi konfigurasi kebijakan pengulangan SDK:
         *
         * Kebijakan pengulangan default:
         * Saat tidak ada kebijakan pengulangan yang dikonfigurasi, SDK menggunakan StandardRetryer sebagai implementasi klien default.
         * Konfigurasi default-nya adalah sebagai berikut:
         * - maxAttempts: Menetapkan jumlah maksimum upaya. Default adalah 3.
         * - maxBackoff: Menetapkan waktu backoff maksimum dalam detik. Default adalah 20 detik.
         * - baseDelay: Menetapkan waktu tunda dasar dalam detik. Default adalah 0,2 detik.
         * - backoffDelayer: Menetapkan algoritma backoff. Default adalah algoritma backoff FullJitter.
         *   Rumus: [0.0, 1.0) * min(2^attempts * baseDelay, maxBackoff)
         * - errorRetryables: Jenis kesalahan yang dapat diulang, termasuk kode status HTTP, kode kesalahan layanan, dan kesalahan klien.
         *
         * Saat terjadi kesalahan yang dapat diulang, konfigurasi yang disediakan digunakan untuk menunda lalu mengulang permintaan.
         * Latensi keseluruhan permintaan meningkat seiring jumlah pengulangan. Jika konfigurasi default
         * tidak memenuhi kebutuhan skenario Anda, Anda dapat mengonfigurasi parameter pengulangan atau memodifikasi implementasi pengulangan.
         */

        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada.
        String region = "<region-id>";

        // Contoh konfigurasi kebijakan pengulangan:

        // 1. Sesuaikan jumlah maksimum pengulangan (default adalah 3, di sini diatur menjadi 5).
        Retryer customRetryer = StandardRetryer.newBuilder()
                .maxAttempts(5)
                .build();

        // 2. Sesuaikan waktu tunda backoff.
        // Sesuaikan baseDelay menjadi 0,5 detik (default 0,2 detik) dan maxBackoff menjadi 25 detik (default 20 detik).
        // Retryer customRetryer = StandardRetryer.newBuilder()
        //         .backoffDelayer(new FullJitterBackoff(Duration.ofMillis(500), Duration.ofSeconds(25)))
        //         .build();

        // 3. Sesuaikan algoritma backoff.
        // Gunakan algoritma backoff tunda tetap alih-alih algoritma FullJitter default, dengan tunda 2 detik setiap kali.
        // Retryer customRetryer = StandardRetryer.newBuilder()
        //         .backoffDelayer(new FixedDelayBackoff(Duration.ofSeconds(2)))
        //         .build();

        // 4. Nonaktifkan kebijakan pengulangan.
        // Untuk menonaktifkan semua upaya pengulangan, gunakan implementasi NopRetryer.
        // Retryer customRetryer = new NopRetryer();

        // Buat klien OSS dengan informasi yang telah dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .retryer(customRetryer)
                .build()) {

            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

Protokol HTTP/HTTPS

Anda dapat menggunakan disableSsl(true) untuk menonaktifkan HTTPS.

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada.
        String region = "<region-id>";

        // Buat klien OSS dengan informasi yang telah dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                // Atur agar tidak menggunakan permintaan HTTPS.
                .disableSsl(true)
                .build()) {

            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

Gunakan titik akhir internal

Anda dapat menggunakan titik akhir internal untuk mengakses sumber daya OSS dalam wilayah yang sama. Hal ini mengurangi biaya trafik dan meningkatkan kecepatan akses.

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Metode 1: Tentukan wilayah dan atur useInternalEndpoint ke true.
        // Tentukan wilayah tempat bucket berada.
        String region = "<region-id>";

        // // Metode 2: Langsung tentukan wilayah dan titik akhir.
        // // Tentukan wilayah tempat bucket berada.
        // String region = "<region-id>";
        // // Tentukan titik akhir internal untuk wilayah bucket.
        // String endpoint = "<endpoint>";

        // Buat klien OSS dengan informasi yang telah dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .useInternalEndpoint(true)
                // .endpoint(endpoint) // Jika menggunakan Metode 2, hapus komentar baris ini dan beri komentar pada baris sebelumnya.
                .build()) {

            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

Gunakan titik akhir akselerasi transfer

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Metode 1: Tentukan wilayah dan atur useAccelerateEndpoint ke true.
        // Tentukan wilayah tempat bucket berada.
        String region = "<region-id>";

        // // Metode 2: Langsung tentukan wilayah dan titik akhir akselerasi transfer.
        // // Tentukan wilayah tempat bucket berada.
        // String region = "<region-id>";
        // // Tentukan titik akhir akselerasi transfer untuk wilayah bucket, misalnya 'https://oss-accelerate.aliyuncs.com'.
        // String endpoint = "https://oss-accelerate.aliyuncs.com";

        // Buat klien OSS dengan informasi yang telah dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .useAccelerateEndpoint(true)
                // .endpoint(endpoint) // Jika menggunakan Metode 2, hapus komentar baris ini dan beri komentar pada baris sebelumnya.
                .build()) {

            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

Gunakan domain privat

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada.
        String region = "<region-id>";

        // Tentukan domain privat Anda. Misalnya: https://service.corp.example.com
        String endpoint = "https://service.corp.example.com";

        // Buat klien OSS dengan informasi yang telah dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                .build()) {

            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

Gunakan HTTPClient kustom

Jika parameter konfigurasi standar tidak memenuhi kebutuhan Anda, Anda dapat menggunakan klien HTTP kustom.

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
Catatan

Contoh berikut menunjukkan cara mengonfigurasi HTTPClient kustom untuk klien sinkron (OSSClient). Jika Anda menggunakan klien asinkron (OSSAsyncClient), ganti Apache5HttpClientBuilder dengan Apache5AsyncHttpClientBuilder. Parameter konfigurasi lainnya tetap sama.

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;
import com.aliyun.sdk.service.oss2.transport.HttpClient;
import com.aliyun.sdk.service.oss2.transport.HttpClientOptions;
import com.aliyun.sdk.service.oss2.transport.apache5client.Apache5HttpClientBuilder;
import java.time.Duration;

public class Example {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // Tentukan wilayah tempat bucket berada.
        String region = "<region-id>";

        // Atur parameter untuk klien HTTP.
        HttpClientOptions httpClientOptions = HttpClientOptions.custom()
                // Waktu tunggu koneksi. Nilai default adalah 5 detik.
                .connectTimeout(Duration.ofSeconds(30))
                // Waktu tunggu untuk membaca dan menulis data. Nilai default adalah 20 detik.
                .readWriteTimeout(Duration.ofSeconds(30))
                // Jumlah maksimum koneksi. Nilai default adalah 1024.
                .maxConnections(2048)
                // Menentukan apakah akan melewati verifikasi sertifikat. Secara default, ini bernilai false.
                .insecureSkipVerify(false)
                // Menentukan apakah akan mengaktifkan pengalihan HTTP. Secara default, ini dinonaktifkan.
                .redirectsEnabled(false)
                // Atur server proxy.
                // .proxyHost("http://user:passswd@proxy.example-***.com")
                .build();

        // Buat klien HTTP dan masukkan parameter klien HTTP.
        HttpClient httpClient = Apache5HttpClientBuilder.create()
                .options(httpClientOptions)
                .build();

        // Buat klien OSS dengan informasi yang telah dikonfigurasi.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .httpClient(httpClient)
                .build()) {

            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...

        } catch (Exception e) {
            System.err.println("Error occurred: " + e.getMessage());
        }
    }
}

Konfigurasi kredensial akses

OSS SDK for Java 2.0 menyediakan berbagai cara untuk mengonfigurasi kredensial akses. Pilih metode inisialisasi yang sesuai berdasarkan kebutuhan autentikasi dan otorisasi Anda.

Cara memilih kredensial akses

Metode inisialisasi penyedia kredensial

Skenario

Dukungan SDK Java 2.0

Kredensial dasar

Masa berlaku kredensial

Metode rotasi atau pembaruan kredensial

Gunakan Pasangan Kunci Akses Pengguna RAM

Aplikasi yang diterapkan di lingkungan aman yang memerlukan akses jangka panjang ke layanan Alibaba Cloud tanpa rotasi kredensial yang sering.

Dukungan bawaan

ID AccessKey

Jangka panjang

Rotasi manual

Gunakan token STS

Aplikasi yang diterapkan di lingkungan tidak tepercaya di mana Anda perlu mengontrol periode validitas dan izin akses.

Dukungan bawaan

Token Layanan Keamanan (STS)

Sementara

Pembaruan manual

Gunakan kredensial ARN Peran RAM

Akses lintas akun ke sumber daya OSS, memerlukan kredensial sementara yang diperoleh dengan mengasumsikan Peran RAM.

Dukungan Diperpanjang

Token Layanan Keamanan (STS)

Sementara

Pembaruan otomatis

Gunakan kredensial Peran RAM ECS

Aplikasi yang berjalan di instans ECS, instans ECI, atau node pekerja Container Service for Kubernetes.

Dukungan Diperpanjang

Token Layanan Keamanan (STS)

Sementara

Pembaruan otomatis

Gunakan kredensial ARN Peran OIDC

Fitur RRSA di Container Service for Kubernetes, yang menerapkan isolasi izin tingkat pod.

Dukungan Diperpanjang

Token Layanan Keamanan (STS)

Sementara

Pembaruan otomatis

Gunakan kredensial akses kustom

Jika metode konfigurasi kredensial di atas tidak memenuhi kebutuhan Anda, Anda dapat menyesuaikan cara memperoleh kredensial.

Dukungan bawaan

Custom

Custom

Custom

Akses anonim

Mengakses sumber daya OSS baca-publik tanpa memberikan kredensial apa pun.

Dukungan bawaan

Tidak ada

Tidak ada

Tidak ada

Fitur yang ditandai sebagai Dukungan ekstensi memerlukan implementasi menggunakan metode kredensial akses kustom dan pustaka manajemen kredensial Alibaba Cloud. SDK memiliki dukungan bawaan untuk metode konfigurasi kredensial dasar. Anda dapat mengimplementasikan fitur ekstensi dengan mengintegrasikan pustaka credentials-java.

Gunakan Pasangan Kunci Akses Pengguna RAM

Anda dapat menginisialisasi penyedia kredensial dengan Pasangan Kunci Akses (ID AccessKey dan Rahasia AccessKey) dari Akun Alibaba Cloud atau Pengguna RAM. Metode ini cocok untuk aplikasi yang berjalan di lingkungan aman dan memerlukan akses jangka panjang ke OSS tanpa rotasi kredensial yang sering. Namun, metode ini mengharuskan Anda memelihara Pasangan Kunci Akses secara manual, yang meningkatkan risiko keamanan dan kompleksitas pemeliharaan.

Penting
  • Akun Alibaba Cloud memiliki izin penuh atas sumber dayanya. Kebocoran Pasangan Kunci Akses Akun Alibaba Cloud menimbulkan risiko keamanan signifikan. Kami menyarankan agar Anda menggunakan Pasangan Kunci Akses Pengguna RAM dengan izin minimum yang diperlukan, bukan Pasangan Kunci Akses Akun Alibaba Cloud.

  • Untuk informasi lebih lanjut tentang cara membuat Pasangan Kunci Akses untuk Pengguna RAM, lihat Buat Pasangan Kunci Akses. ID AccessKey dan Rahasia AccessKey Pengguna RAM hanya ditampilkan saat dibuat. Anda harus menyimpannya. Jika lupa, Anda harus membuat yang baru.

Konfigurasikan variabel lingkungan

Linux/macOS

  1. Atur variabel lingkungan menggunakan Pasangan Kunci Akses Pengguna RAM.

    export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'
    export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'
  2. Jalankan perintah berikut untuk memverifikasi bahwa variabel lingkungan telah dikonfigurasi.

    echo $OSS_ACCESS_KEY_ID
    echo $OSS_ACCESS_KEY_SECRET

Windows

CMD

setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"

PowerShell

[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_ID", "YOUR_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
[Environment]::SetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", "YOUR_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)

Kode contoh

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // Muat informasi kredensial dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // Buat klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Konfigurasi kredensial statis

Kode berikut menunjukkan cara menyematkan kredensial akses dengan secara eksplisit menyetel Pasangan Kunci Akses.

Peringatan

Jangan menyematkan kredensial akses di aplikasi produksi Anda. Metode ini hanya untuk tujuan pengujian.

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.StaticCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // Buat penyedia kredensial statis dan secara eksplisit atur Pasangan Kunci Akses.
        // Ganti dengan ID AccessKey dan Rahasia AccessKey Pengguna RAM Anda.
        CredentialsProvider credentialsProvider = new StaticCredentialsProvider(
                "YOUR_ACCESS_KEY_ID",
                "YOUR_ACCESS_KEY_SECRET"
        );
        
        // Buat klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan token STS

Jika aplikasi Anda memerlukan akses sementara ke OSS, Anda dapat menggunakan kredensial identitas sementara dari Security Token Service (STS). Kredensial ini terdiri dari ID AccessKey, Rahasia AccessKey, dan token keamanan. Metode ini mengharuskan Anda memelihara dan memperbarui token STS secara manual, yang dapat meningkatkan risiko keamanan dan kompleksitas pemeliharaan.

Konfigurasikan variabel lingkungan

Penting
  • Metode ini menggunakan kredensial identitas sementara (ID AccessKey, Rahasia AccessKey, dan token Layanan Token Keamanan (STS)) yang Anda peroleh dari STS, bukan Pasangan Kunci Akses Pengguna RAM.

  • ID AccessKey yang Anda peroleh dari STS diawali dengan "STS", misalnya, "STS.L4aBSCSJVMuKg5U1****".

Linux/macOS

export OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
export OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
export OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>

Windows

set OSS_ACCESS_KEY_ID=<STS_ACCESS_KEY_ID>
set OSS_ACCESS_KEY_SECRET=<STS_ACCESS_KEY_SECRET>
set OSS_SESSION_TOKEN=<STS_SECURITY_TOKEN>

Kode contoh

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // Muat informasi autentikasi yang diperlukan untuk mengakses OSS dari variabel lingkungan untuk verifikasi identitas.
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // Buat klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Konfigurasi kredensial statis

Kode berikut menunjukkan cara menyematkan kredensial akses dengan secara eksplisit menyetel Pasangan Kunci Akses sementara.

Peringatan

Jangan menyematkan kredensial akses di aplikasi produksi Anda. Metode ini hanya untuk tujuan pengujian.

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.StaticCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // Tentukan ID AccessKey dan Rahasia AccessKey sementara yang diperoleh.
        // Perhatikan bahwa ID AccessKey yang diperoleh dari STS diawali dengan "STS".
        String stsAccessKeyId = "STS.****************";
        String stsAccessKeySecret = "yourAccessKeySecret";
        String stsSecurityToken = "yourSecurityToken";
        
        // Buat penyedia kredensial statis dan secara eksplisit atur Pasangan Kunci Akses sementara dan token keamanan STS.
        CredentialsProvider credentialsProvider = new StaticCredentialsProvider(
                stsAccessKeyId,
                stsAccessKeySecret,
                stsSecurityToken
        );
        
        // Buat klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan kredensial ARN Peran RAM

Untuk akses berizin ke OSS, seperti untuk akses lintas akun, Anda dapat menginisialisasi penyedia kredensial menggunakan Nama Sumber Daya Alibaba Cloud (ARN) dari Peran RAM. Metode ini menggunakan token Layanan Token Keamanan (STS). Saat Anda menentukan ARN Peran RAM, alat kredensial secara otomatis memanggil operasi API AssumeRole untuk meminta token STS dan memperbaruinya sebelum kedaluwarsa. Anda juga dapat menyetel parameter policy untuk lebih membatasi izin Peran RAM.

Penting
  • Akun Alibaba Cloud memiliki izin penuh atas sumber dayanya. Kebocoran Pasangan Kunci Akses Akun Alibaba Cloud menimbulkan risiko keamanan signifikan. Kami menyarankan agar Anda menggunakan Pasangan Kunci Akses Pengguna RAM dengan izin minimum yang diperlukan, bukan Pasangan Kunci Akses Akun Alibaba Cloud.

  • Untuk informasi lebih lanjut tentang cara membuat Pasangan Kunci Akses untuk Pengguna RAM, lihat Buat Pasangan Kunci Akses. ID AccessKey dan Rahasia AccessKey Pengguna RAM hanya ditampilkan saat dibuat. Anda harus menyimpannya. Jika lupa, Anda harus membuat yang baru.

  • Untuk informasi lebih lanjut tentang cara memperoleh ARN Peran RAM, lihat Buat Peran RAM.

Tambahkan dependensi

Tambahkan dependensi manajemen kredensial Alibaba Cloud ke file pom.xml Anda.

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>credentials-java</artifactId>
    <version>0.3.4</version>
</dependency>

Konfigurasikan Pasangan Kunci Akses dan ARN Peran RAM sebagai kredensial akses

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProviderSupplier;
// Catatan: Impor berikut berasal dari dependensi eksternal credentials-java
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // Konfigurasikan kredensial ARN Peran RAM.
        Config credentialConfig = new Config()
                .setType("ram_role_arn")
                // Peroleh Pasangan Kunci Akses Pengguna RAM (ID AccessKey dan Rahasia AccessKey) dari variabel lingkungan.
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // ARN Peran RAM yang akan diasumsikan. Contoh nilai: acs:ram::123456789012****:role/adminrole
                // Anda dapat menyetel RoleArn melalui variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                .setRoleArn("acs:ram::123456789012****:role/adminrole")
                // Nama sesi peran. Anda dapat menyetel RoleSessionName melalui variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                .setRoleSessionName("your-session-name")
                // Atur kebijakan izin yang lebih restriktif. Ini opsional. Contoh nilai: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // Atur periode validitas sesi peran dalam detik. Default adalah 3600 detik (1 jam). Ini opsional.
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

        // Buat penyedia kredensial untuk pemuatan kredensial dinamis.
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            try {
                com.aliyun.credentials.models.CredentialModel cred = credentialClient.getCredential();
                return new Credentials(
                    cred.getAccessKeyId(),
                    cred.getAccessKeySecret(),
                    cred.getSecurityToken()
                );
            } catch (Exception e) {
                throw new RuntimeException("Gagal memperoleh kredensial", e);
            }
        });

        // Buat instans klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan kredensial Peran RAM ECS

Jika aplikasi Anda berjalan di instans ECS, instans ECI, atau node pekerja Container Service for Kubernetes, Anda dapat menggunakan Peran RAM ECS untuk menginisialisasi penyedia kredensial. SDK secara otomatis mengambil dan memperbarui token STS sementara untuk peran yang dilampirkan ke instans tersebut. Metode ini menghilangkan kebutuhan untuk mengelola secara manual Pasangan Kunci Akses atau token STS. Untuk informasi lebih lanjut tentang cara membuat Peran RAM ECS, lihat Buat Peran RAM.

Tambahkan dependensi

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>credentials-java</artifactId>
    <version>0.3.4</version>
</dependency>

Konfigurasikan Peran RAM ECS sebagai kredensial akses

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProviderSupplier;
// Catatan: Impor berikut berasal dari dependensi eksternal credentials-java
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // Konfigurasikan kredensial Peran RAM ECS.
        Config credentialConfig = new Config()
                .setType("ecs_ram_role")      // Jenis kredensial akses. Tetap sebagai ecs_ram_role.
                .setRoleName("EcsRoleExample"); // Nama Peran RAM yang diberikan ke instans ECS. Parameter opsional. Jika tidak disetel, akan diambil secara otomatis. Kami sangat menyarankan untuk menyetelnya guna mengurangi permintaan.

        Client credentialClient = new Client(credentialConfig);

        // Buat penyedia kredensial untuk pemuatan kredensial dinamis.
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            try {
                com.aliyun.credentials.models.CredentialModel cred = credentialClient.getCredential();
                return new Credentials(
                    cred.getAccessKeyId(),
                    cred.getAccessKeySecret(),
                    cred.getSecurityToken()
                );
            } catch (Exception e) {
                throw new RuntimeException("Gagal memperoleh kredensial", e);
            }
        });

        // Buat instans klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan kredensial ARN Peran OIDC

Di Container Service for Kubernetes, Anda dapat menggunakan RAM Roles for Service Accounts (RRSA) untuk kontrol izin detail halus tingkat pod. Ini berguna untuk kluster multi-penyewa di mana Anda tidak ingin semua pod mewarisi izin dari peran RAM node pekerja. Dengan RRSA, SDK menggunakan token OpenID Connect (OIDC) yang dimount ke dalam pod untuk mengasumsikan Peran RAM tertentu dan memperoleh token STS sementara. Proses ini otomatis dan menghilangkan kebutuhan untuk mengelola kredensial secara manual. Untuk informasi lebih lanjut, lihat Gunakan RRSA untuk memberikan izin RAM ke ServiceAccount.

Tambahkan dependensi

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>credentials-java</artifactId>
    <version>0.3.4</version>
</dependency>

Konfigurasikan ARN Peran OIDC sebagai kredensial akses

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProviderSupplier;
// Catatan: Impor berikut berasal dari dependensi eksternal credentials-java
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // Konfigurasikan kredensial ARN Peran OIDC.
        Config credentialConfig = new Config()
                // Tentukan jenis kredensial. Tetap sebagai oidc_role_arn.
                .setType("oidc_role_arn")
                // ARN Peran RAM. Anda dapat menyetel RoleArn melalui variabel lingkungan ALIBABA_CLOUD_ROLE_ARN.
                .setRoleArn(System.getenv("ALIBABA_CLOUD_ROLE_ARN"))
                // ARN penyedia OIDC. Anda dapat menyetel OidcProviderArn melalui variabel lingkungan ALIBABA_CLOUD_OIDC_PROVIDER_ARN.
                .setOidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"))
                // Jalur file token OIDC. Anda dapat menyetel OidcTokenFilePath melalui variabel lingkungan ALIBABA_CLOUD_OIDC_TOKEN_FILE.
                .setOidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"))
                // Nama sesi peran. Anda dapat menyetel RoleSessionName melalui variabel lingkungan ALIBABA_CLOUD_ROLE_SESSION_NAME.
                .setRoleSessionName("your-session-name")
                // Atur kebijakan izin yang lebih restriktif. Ini opsional. Contoh nilai: {"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // Atur periode validitas sesi peran dalam detik. Default adalah 3600 detik (1 jam). Ini opsional.
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

        // Buat penyedia kredensial untuk pemuatan kredensial dinamis.
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            try {
                com.aliyun.credentials.models.CredentialModel cred = credentialClient.getCredential();
                return new Credentials(
                    cred.getAccessKeyId(),
                    cred.getAccessKeySecret(),
                    cred.getSecurityToken()
                );
            } catch (Exception e) {
                throw new RuntimeException("Gagal memperoleh kredensial", e);
            }
        });

        // Buat instans klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Gunakan kredensial akses kustom

Jika metode konfigurasi kredensial di atas tidak memenuhi kebutuhan Anda, Anda dapat mengimplementasikan metode kustom untuk memperoleh kredensial. SDK Java menyediakan berbagai cara untuk melakukan ini.

Implementasikan melalui antarmuka Supplier

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProviderSupplier;

public class OSSExample {
    public static void main(String[] args) {
        // Buat penyedia kredensial kustom.
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            // TODO: Implementasikan logika pengambilan kredensial kustom Anda.
            
            // Kembalikan kredensial jangka panjang.
            return new Credentials("access_key_id", "access_key_secret");
            
            // Kembalikan token STS (jika diperlukan).
            // return new Credentials("sts_access_key_id", "sts_access_key_secret", "security_token");
        });
        
        // Buat klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Implementasikan antarmuka CredentialsProvider

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.Credentials;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;

public class CustomCredentialsProvider implements CredentialsProvider {
    
    @Override
    public Credentials getCredentials() {
        // TODO: Implementasikan logika pengambilan kredensial kustom Anda.
        
        // Kembalikan kredensial jangka panjang.
        return new Credentials("access_key_id", "access_key_secret");
        
        // Kembalikan token STS (jika diperlukan).
        // Untuk kredensial sementara, Anda perlu memperbaruinya berdasarkan waktu kedaluwarsanya.
        // return new Credentials("sts_access_key_id", "sts_access_key_secret", "security_token");
    }
}

public class OSSExample {
    public static void main(String[] args) {
        // Buat penyedia kredensial kustom.
        CredentialsProvider credentialsProvider = new CustomCredentialsProvider();
        
        // Buat klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Akses anonim

Jika Anda hanya perlu mengakses sumber daya OSS baca-publik, Anda dapat menggunakan akses anonim tanpa memberikan kredensial.

Sebelum menjalankan kode contoh, ganti <region-id> dengan wilayah dan titik akhir yang sebenarnya, seperti ap-southeast-1.
import com.aliyun.sdk.service.oss2.OSSClient;
import com.aliyun.sdk.service.oss2.credentials.CredentialsProvider;
import com.aliyun.sdk.service.oss2.credentials.AnonymousCredentialsProvider;

public class OSSExample {
    public static void main(String[] args) {
        // Buat penyedia kredensial anonim.
        CredentialsProvider credentialsProvider = new AnonymousCredentialsProvider();
        
        // Buat klien OSS.
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("<region-id>") // Tentukan wilayah tempat bucket berada.
                .build()) {
            
            // Gunakan klien yang telah dibuat untuk operasi selanjutnya...
            // Catatan: Akses anonim hanya dapat digunakan untuk sumber daya dengan izin baca-publik.
            
        } catch (Exception e) {
            System.err.println("Operasi gagal: " + e.getMessage());
        }
    }
}

Kode contoh

Klasifikasi fitur

Deskripsi contoh

Versi Sinkronisasi

Versi asinkron

Bucket

Buat bucket

PutBucket.java

PutBucketAsync.java

Daftar bucket

ListBuckets.java

ListBucketsAsync.java

Peroleh informasi bucket

GetBucketInfo.java

GetBucketInfoAsync.java

Dapatkan wilayah bucket

GetBucketLocation.java

GetBucketLocationAsync.java

Peroleh statistik kapasitas penyimpanan

GetBucketStat.java

GetBucketStatAsync.java

Hapus bucket

DeleteBucket.java

DeleteBucketAsync.java

Unggah file

Unggah sederhana

PutObject.java

PutObjectAsync.java

Unggah tambahan

AppendObject.java

AppendObjectAsync.java

Unggah multi-bagian

MultipartUpload.java

MultipartUploadAsync.java

Daftar tugas unggah multi-bagian

ListMultipartUploads.java

ListMultipartUploadsAsync.java

Daftar bagian yang diunggah

ListParts.java

ListPartsAsync.java

Batalkan unggah multi-bagian

AbortMultipartUpload.java

AbortMultipartUploadAsync.java

Unduh file

Unduh sederhana

GetObject.java

GetObjectAsync.java

Manajemen file

Salin file

CopyObject.java

CopyObjectAsync.java

Periksa apakah file ada

HeadObject.java

HeadObjectAsync.java

Daftar file

ListObjects.java

ListObjectsAsync.java

Daftar file V2

ListObjectsV2.java

ListObjectsV2Async.java

Hapus file

DeleteObject.java

DeleteObjectAsync.java

Hapus beberapa file

DeleteMultipleObjects.java

DeleteMultipleObjectsAsync.java

Dapatkan metadata file

GetObjectMeta.java

GetObjectMetaAsync.java

Objek arsip

Pulihkan file

RestoreObject.java

RestoreObjectAsync.java

Bersihkan file yang dipulihkan

CleanRestoredObject.java

CleanRestoredObjectAsync.java

Tautan simbolik

Buat tautan simbolik

PutSymlink.java

PutSymlinkAsync.java

Dapatkan tautan simbolik

GetSymlink.java

GetSymlinkAsync.java

Penandaan objek

Atur tag objek

PutObjectTagging.java

PutObjectTaggingAsync.java

Dapatkan tag objek

GetObjectTagging.java

GetObjectTaggingAsync.java

Hapus tag objek

DeleteObjectTagging.java

DeleteObjectTaggingAsync.java

Kontrol akses

Atur ACL bucket

PutBucketAcl.java

PutBucketAclAsync.java

Dapatkan ACL bucket

GetBucketAcl.java

GetBucketAclAsync.java

Atur ACL file

PutObjectAcl.java

PutObjectAclAsync.java

Dapatkan ACL objek

GetObjectAcl.java

GetObjectAclAsync.java

Pengendalian versi

Atur pengendalian versi

PutBucketVersioning.java

PutBucketVersioningAsync.java

Dapatkan status pengendalian versi

GetBucketVersioning.java

GetBucketVersioningAsync.java

Daftar versi objek

ListObjectVersions.java

ListObjectVersionsAsync.java

Akses lintas domain

Atur aturan CORS

PutBucketCors.java

PutBucketCorsAsync.java

Dapatkan aturan CORS

GetBucketCors.java

GetBucketCorsAsync.java

Hapus aturan CORS

DeleteBucketCors.java

DeleteBucketCorsAsync.java

Permintaan preflight

OptionObject.java

OptionObjectAsync.java

Fitur sistem

Kueri informasi titik akhir

DescribeRegions.java

DescribeRegionsAsync.java