All Products
Search
Document Center

Object Storage Service:OSS Kotlin SDK V2 (Preview)

Last Updated:Aug 04, 2026

Integrasikan Alibaba Cloud OSS ke dalam aplikasi Kotlin dan Android Anda menggunakan OSS Kotlin SDK V2 untuk mengunggah, mengunduh, dan mengelola file.

GitHub | Panduan Pengembang OSS Kotlin SDK V2

Mulai Cepat

Mulai menggunakan OSS Kotlin SDK V2:

image

Prasyarat

  • Kotlin: 2.1.0 atau versi lebih baru

  • Java: Java 8+ saat runtime (Java 11+ untuk build dari source)

  • Platform yang didukung: JVM (Desktop / Server), Android, JavaScript (Node.js dan browser), WebAssembly (wasmJs untuk Node.js dan browser), iOS (iosArm64 dan iosSimulatorArm64), serta macOS (macosArm64)

Verifikasi versi Kotlin di file build.gradle.kts Anda. Lakukan upgrade jika versinya lebih lama dari 2.1.0.

Instal SDK

Instal OSS Kotlin SDK V2 dengan Gradle (disarankan).

Opsi 1: Dependensi Gradle (disarankan)

Tambahkan dependensi ke build.gradle.kts:

dependencies {
    implementation("com.aliyun:kotlin-oss-v2:<latest-version>")

    // Untuk fitur tambahan (seperti API berbagi sumber daya lintas asal)
    // implementation("com.aliyun:kotlin-oss-v2-extension:0.1.0-dev")
}

Paket:

  • kotlin-oss-v2: API inti untuk operasi bucket, operasi objek, dan fitur lanjutan (paginator, presigning)

  • kotlin-oss-v2-extension: API ekstensi untuk fitur konfigurasi bucket seperti CORS, logging, inventory, dan gaya gambar

Opsi 2: Membangun dari sumber

Clone OSS Kotlin SDK V2 terbaru dari GitHub dan build dengan Gradle:

# Clone proyek
$ git clone https://github.com/aliyun/alibabacloud-oss-kotlin-sdk-v2.git

# Masuk ke direktori
$ cd alibabacloud-oss-kotlin-sdk-v2/

# Publish ke MavenLocal
$ ./gradlew clean publishToMavenLocal

Tambahkan mavenLocal ke konfigurasi repositori Anda:

repositories {
    ...
    mavenLocal()
}

Tambahkan dependensi ke proyek Anda:

implementation("com.aliyun:kotlin-oss-v2:<latest-version>")
// implementation("com.aliyun:kotlin-oss-v2-extension:<latest-version>")

Opsi 3: Impor dependensi secara manual

# Clone proyek
$ git clone https://github.com/aliyun/alibabacloud-oss-kotlin-sdk-v2.git

# Masuk ke direktori
$ cd aliyun-oss-kotlin-sdk-v2/

# Jalankan skrip packaging
$ ./gradlew :oss-sdk:assemble
# ./gradlew :oss-sdk-extension:assemble

# Menggunakan aar sebagai contoh
# Masuk ke direktori output build tempat paket dihasilkan
$ cd oss-sdk/build/outputs/aar && ls
# cd oss-sdk-extension/build/outputs/aar && ls

Konfigurasikan kredensial akses

Simpan pasangan AccessKey Pengguna RAM sebagai variabel lingkungan.

Buat Pengguna RAM dengan akses AccessKey permanen di Konsol RAM, simpan pasangan AccessKey tersebut, dan berikan izin AliyunOSSFullAccess kepada pengguna.

Linux

  1. Tambahkan variabel lingkungan ke ~/.bashrc.

    echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
    echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
  2. Terapkan perubahan.

    source ~/.bashrc
  3. Verifikasi variabel lingkungan.

    echo $OSS_ACCESS_KEY_ID
    echo $OSS_ACCESS_KEY_SECRET

macOS

  1. Periksa shell default Anda.

    echo $SHELL
  2. Lanjutkan berdasarkan shell default Anda.

    Zsh

    1. Tambahkan variabel lingkungan ke ~/.zshrc.

      echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
      echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
    2. Terapkan perubahan.

      source ~/.zshrc
    3. Verifikasi variabel lingkungan.

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

    Bash

    1. Tambahkan variabel lingkungan ke ~/.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. Terapkan perubahan.

      source ~/.bash_profile
    3. Verifikasi variabel lingkungan.

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

Windows

CMD

  1. Jalankan perintah berikut di CMD.

    setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
    setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
  2. Verifikasi variabel lingkungan.

    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)
  2. Verifikasi variabel lingkungan.

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

Inisialisasi client

Inisialisasi OSSClient dengan Wilayah dan titik akhir.

  • OSSClient mengimplementasikan Closeable. Saat digunakan dengan fungsi ekstensi use, resource dilepas secara otomatis tanpa perlu memanggil close.

  • Pembuatan dan penghapusan OSSClient bersifat mahal. Gunakan kembali instans singleton, dan panggil close sebelum aplikasi Anda keluar untuk menghindari kebocoran resource.

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider
import com.aliyun.kotlin.sdk.service.oss2.models.ListBucketsRequest
import com.aliyun.kotlin.sdk.service.oss2.paginator.listBucketsPaginator

suspend fun main() {
    val region = "cn-hangzhou"

    // Gunakan konfigurasi default SDK
    // Muat kredensial dari variabel lingkungan
    val config = ClientConfiguration.loadDefault().apply {
        this.region = region
        credentialsProvider = EnvironmentVariableCredentialsProvider()
    }

    OSSClient.create(config).use { client ->
        // Gunakan paginator untuk menampilkan semua bucket
        client.listBucketsPaginator(ListBucketsRequest {}).collect { result ->
            result.buckets?.forEach { bucket ->
                println("bucket: name:${bucket.name}, region:${bucket.region}, storageClass:${bucket.storageClass}")
            }
        }
    }
}

Output menampilkan semua bucket di seluruh wilayah dalam akun Anda:

bucket: name: examplebucket01, region: cn-hangzhou, storageClass: Standard
bucket: name: examplebucket02, region: cn-hangzhou, storageClass: Standard

Konfigurasi client

Konfigurasi apa saja yang didukung oleh client?

Parameter

Deskripsi

region

(Wajib) Wilayah tempat mengirim permintaan

credentialsProvider

(Wajib) Penyedia kredensial

endpoint

URL titik akhir

httpTransport

Lapisan transport HTTP

retryMaxAttempts

Jumlah maksimum upaya permintaan HTTP. Default: 3

retryer

Implementasi retry untuk permintaan HTTP

connectTimeout

Timeout koneksi. Default: 10 detik

readWriteTimeout

Timeout baca/tulis. Default: 20 detik

insecureSkipVerify

Apakah verifikasi sertifikat SSL dilewati. Default: false

enabledRedirect

Apakah redirect HTTP diaktifkan. Default: false

proxyHost

Server proxy

signatureVersion

Versi signature. Default: v4

disableSsl

Apakah menggunakan HTTP alih-alih HTTPS. Default: false (HTTPS)

usePathStyle

Apakah menggunakan URL bergaya path. Default: gaya virtual-hosted

useCName

Apakah menggunakan nama domain kustom. Default: false

useDualStackEndpoint

Apakah menggunakan titik akhir dual-stack. Default: false

useAccelerateEndpoint

Apakah menggunakan titik akhir akselerasi transfer. Default: false

useInternalEndpoint

Apakah menggunakan titik akhir internal. Default: false

additionalHeaders

Header tambahan yang akan ditandatangani. Hanya berlaku dengan signature V4

userAgent

Informasi User-Agent tambahan

disableUploadCRC64Check

Apakah verifikasi CRC64 unggahan dinonaktifkan. Default: diaktifkan

disableDownloadCRC64Check

Apakah verifikasi CRC64 unduhan dinonaktifkan. Default: diaktifkan

Gunakan nama domain kustom

Nama domain kustom memungkinkan pratinjau langsung di browser dan akselerasi CDN untuk file yang dihosting di OSS.

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider

suspend fun main() {
    // Tentukan wilayah tempat bucket berada. Misalnya, untuk China East 1 (Hangzhou), atur Region ke cn-hangzhou
    val region = "cn-hangzhou"
    
    // Masukkan domain kustom Anda. Misalnya, www.example-***.com
    val endpoint = "https://www.example-***.com"

    val config = ClientConfiguration.loadDefault().apply {
        this.region = region
        this.endpoint = endpoint
        // Catatan: atur ini ke true untuk mengaktifkan opsi CNAME; jika tidak, domain kustom tidak dapat digunakan
        this.useCName = true
        credentialsProvider = EnvironmentVariableCredentialsProvider()
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Pengaturan timeout

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider
import kotlin.time.Duration.Companion.seconds

suspend fun main() {
    val region = "cn-hangzhou"

    val config = ClientConfiguration.loadDefault().apply {
        this.region = region
        credentialsProvider = EnvironmentVariableCredentialsProvider()
        // Atur timeout pembentukan koneksi; default adalah 10 detik
        connectTimeout = 30.seconds
        // Atur timeout untuk membaca/menulis data dalam aplikasi; default adalah 20 detik
        readWriteTimeout = 30.seconds
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Kebijakan retry

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider
import com.aliyun.kotlin.sdk.service.oss2.retry.StandardRetryer
import com.aliyun.kotlin.sdk.service.oss2.retry.FullJitterBackoff
import com.aliyun.kotlin.sdk.service.oss2.retry.FixedDelayBackoff
import com.aliyun.kotlin.sdk.service.oss2.retry.NopRetryer
import kotlin.time.Duration.Companion.milliseconds
import kotlin.time.Duration.Companion.seconds

suspend fun main() {
    /*
     * Konfigurasi kebijakan retry SDK:
     *
     * Kebijakan retry default:
     * Saat tidak ada kebijakan retry yang dikonfigurasi, SDK menggunakan StandardRetryer sebagai implementasi default client, dengan konfigurasi default berikut:
     * - maxAttempts: menetapkan jumlah maksimum upaya. Default 3
     * - maxBackoff: menetapkan waktu backoff maksimum. Default 20 detik
     * - baseDelay: menetapkan delay dasar. Default 200 milidetik
     * - backoffDelayer: menetapkan algoritma backoff. Secara default menggunakan algoritma backoff FullJitter
     *   Rumus perhitungan: [0.0, 1.0) * min(2^attempts * baseDelay, maxBackoff)
     * - errorRetryable: jenis kesalahan yang dapat di-retry, termasuk kode status HTTP, kode kesalahan layanan, kesalahan client, dan sebagainya
     *
     * Saat terjadi kesalahan yang dapat di-retry, konfigurasi yang diberikan digunakan untuk memberi jeda lalu mencoba ulang permintaan.
     * Total delay permintaan meningkat seiring jumlah retry. Jika konfigurasi default tidak sesuai kebutuhan Anda,
     * Anda dapat mengonfigurasi parameter retry atau mengubah implementasi retry.
     */

    val region = "cn-hangzhou"

    // Contoh konfigurasi kebijakan retry:

    // 1. Menyesuaikan jumlah maksimum retry (default 3; diatur ke 5 di sini)
    val customRetryer = StandardRetryer.newBuilder()
        .setMaxAttempts(5)
        .build()

    // 2. Menyesuaikan delay backoff
    // Sesuaikan baseDelay menjadi 500 milidetik (default 200 ms) dan maxBackoff menjadi 25 detik (default 20 detik)
    // val customRetryer = StandardRetryer.newBuilder()
    //     .setBackoffDelayer(FullJitterBackoff(500.milliseconds, 25.seconds))
    //     .build()

    // 3. Menyesuaikan algoritma backoff
    // Gunakan algoritma backoff fixed-delay alih-alih algoritma FullJitter default, dengan jeda 2 detik setiap kali
    // val customRetryer = StandardRetryer.newBuilder()
    //     .setBackoffDelayer(FixedDelayBackoff(2.seconds))
    //     .build()

    // 4. Menonaktifkan kebijakan retry
    // Untuk menonaktifkan semua upaya retry, gunakan implementasi NopRetryer
    // val customRetryer = NopRetryer()

    val config = ClientConfiguration.loadDefault().apply {
        this.region = region
        credentialsProvider = EnvironmentVariableCredentialsProvider()
        retryer = customRetryer
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Protokol HTTP/HTTPS

Atur disableSsl = true untuk menggunakan HTTP alih-alih HTTPS.

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider

suspend fun main() {
    val region = "cn-hangzhou"

    val config = ClientConfiguration.loadDefault().apply {
        this.region = region
        credentialsProvider = EnvironmentVariableCredentialsProvider()
        // Nonaktifkan permintaan HTTPS
        disableSsl = true
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Gunakan titik akhir internal

Gunakan jaringan internal untuk mengakses sumber daya OSS di wilayah yang sama, sehingga mengurangi biaya traffic dan meningkatkan performa.

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider

suspend fun main() {
    // Pendekatan 1: tentukan Region dan atur useInternalEndpoint ke true
    val region = "cn-hangzhou"

    // Pendekatan 2: tentukan Region dan Endpoint secara langsung
    // val region = "cn-hangzhou"
    // val endpoint = "oss-cn-hangzhou-internal.aliyuncs.com"

    val config = ClientConfiguration.loadDefault().apply {
        this.region = region
        credentialsProvider = EnvironmentVariableCredentialsProvider()
        useInternalEndpoint = true
        // Jika Anda menggunakan pendekatan 2, hapus komentar baris berikut dan beri komentar pada baris di atas
        // this.endpoint = endpoint
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Gunakan akselerasi transfer

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider

suspend fun main() {
    // Pendekatan 1: tentukan Region dan atur useAccelerateEndpoint ke true
    val region = "cn-hangzhou"

    // Pendekatan 2: tentukan Region dan Endpoint akselerasi transfer secara langsung
    // val region = "cn-hangzhou"
    // val endpoint = "https://oss-accelerate.aliyuncs.com"

    val config = ClientConfiguration.loadDefault().apply {
        this.region = region
        credentialsProvider = EnvironmentVariableCredentialsProvider()
        useAccelerateEndpoint = true
        // Jika Anda menggunakan pendekatan 2, hapus komentar baris berikut dan beri komentar pada baris di atas
        // this.endpoint = endpoint
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Gunakan domain khusus

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider

suspend fun main() {
    val region = "cn-hangzhou"
    
    // Masukkan domain privat Anda. Misalnya: https://service.corp.example.com
    val endpoint = "https://service.corp.example.com"

    val config = ClientConfiguration.loadDefault().apply {
        this.region = region
        this.endpoint = endpoint
        credentialsProvider = EnvironmentVariableCredentialsProvider()
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Gunakan Titik akhir China Government Cloud

Konfigurasikan OSSClient dengan titik akhir Wilayah dan titik akhir.

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider

suspend fun main() {
    // Tentukan wilayah tempat bucket berada. Misalnya, untuk China North 2 Alibaba Gov Cloud 1, atur Region ke cn-north-2-gov-1
    val region = "cn-north-2-gov-1"
    
    // Tentukan titik akhir internal untuk wilayah tempat bucket berada. Misalnya, untuk China North 2 Alibaba Gov Cloud 1
    // Untuk menggunakan protokol HTTP, tentukan domain sebagai 'http://oss-cn-north-2-gov-1-internal.aliyuncs.com'
    val endpoint = "https://oss-cn-north-2-gov-1-internal.aliyuncs.com"

    val config = ClientConfiguration.loadDefault().apply {
        this.region = region
        this.endpoint = endpoint
        credentialsProvider = EnvironmentVariableCredentialsProvider()
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Konfigurasi kredensial akses

OSS Kotlin SDK V2 mendukung berbagai jenis kredensial. Pilih salah satu berdasarkan kebutuhan keamanan dan akses Anda.

Bagaimana cara memilih jenis kredensial?

Credential type

Scenario

Kotlin SDK V2 support

Underlying credential

Validity

Rotation or refresh

Use the AccessKey of a RAM user

Lingkungan yang aman dan stabil yang memerlukan akses jangka panjang tanpa rotasi kredensial yang sering

Built-in

AK

Long-term

Manual rotation

Use STS temporary credentials

Lingkungan tidak tepercaya yang memerlukan durasi akses dan izin yang terkontrol

Built-in

STS Token

Temporary

Manual refresh

Use custom credentials

Saat jenis kredensial di atas tidak memenuhi kebutuhan Anda

Built-in

Custom

Custom

Custom

Anonymous access

Akses sumber daya public-read tanpa kredensial

Built-in

N/A

N/A

N/A

Use the AccessKey of a RAM user

Untuk aplikasi di lingkungan yang aman dan stabil yang memerlukan akses OSS jangka panjang, inisialisasi penyedia kredensial dengan Pasangan Kunci Akses (AccessKey ID dan AccessKey Secret) dari Pengguna RAM. Metode ini memerlukan manajemen dan rotasi kunci secara manual.

Penting
  • Akun Alibaba Cloud memiliki akses penuh ke semua sumber daya. Kebocoran AccessKey menimbulkan risiko keamanan yang signifikan. Gunakan AccessKey Pengguna RAM dengan izin least-privilege sebagai gantinya.

  • Untuk membuat AccessKey Pengguna RAM, buka Create an AccessKey. AccessKey ID dan Secret hanya ditampilkan saat pembuatan. Simpan segera — jika hilang, buat pasangan baru.

Konfigurasi variabel lingkungan

Linux/macOS

  1. Tetapkan AccessKey Pengguna RAM sebagai variabel lingkungan:

    export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'
    export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'
  2. Verifikasi:

    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)

Contoh kode

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider

suspend fun main() {
    // Muat kredensial dari variabel lingkungan untuk otentikasi
    val credentialsProvider = EnvironmentVariableCredentialsProvider()

    val config = ClientConfiguration.loadDefault().apply {
        this.region = "cn-hangzhou"  // Tentukan wilayah tempat bucket berada
        this.credentialsProvider = credentialsProvider
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Konfigurasi kredensial statis

Masukkan kredensial secara langsung dalam kode (hanya untuk pengujian).

Peringatan

Jangan menyematkan kredensial dalam aplikasi produksi. Metode ini hanya untuk pengujian.

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.StaticCredentialsProvider

suspend fun main() {
    // Buat penyedia kredensial statis, atur secara eksplisit kunci akses
    // Ganti dengan AccessKey ID dan AccessKey Secret RAM user Anda
    val credentialsProvider = StaticCredentialsProvider(
        accessKeyId = "YOUR_ACCESS_KEY_ID",
        accessKeySecret = "YOUR_ACCESS_KEY_SECRET"
    )

    val config = ClientConfiguration.loadDefault().apply {
        this.region = "cn-hangzhou"  // Tentukan wilayah tempat bucket berada
        this.credentialsProvider = credentialsProvider
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Use STS temporary credentials

Untuk aplikasi yang memerlukan akses OSS sementara dan terbatas cakupannya, inisialisasi penyedia kredensial dengan kredensial sementara STS (AccessKey ID, AccessKey Secret, dan Security Token). Anda harus melakukan refresh token secara manual sebelum masa berlaku habis.

  • Token STS akan kedaluwarsa pada waktu yang ditentukan saat pembuatan dan tidak dapat digunakan setelah itu.

Konfigurasi variabel lingkungan

Penting
  • Ini adalah kredensial sementara STS (AccessKey ID, AccessKey Secret, dan Security Token), bukan Pasangan Kunci Akses Pengguna RAM.

  • AccessKey ID dari STS diawali dengan "STS", contohnya "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>

Contoh kode

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.EnvironmentVariableCredentialsProvider

suspend fun main() {
    // Muat informasi otentikasi yang diperlukan untuk mengakses OSS dari variabel lingkungan, digunakan untuk otentikasi
    val credentialsProvider = EnvironmentVariableCredentialsProvider()

    val config = ClientConfiguration.loadDefault().apply {
        this.region = "cn-hangzhou"  // Tentukan wilayah tempat bucket berada
        this.credentialsProvider = credentialsProvider
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Konfigurasi kredensial statis

Masukkan kredensial sementara secara langsung dalam kode (hanya untuk pengujian).

Peringatan

Jangan menyematkan kredensial dalam aplikasi produksi. Metode ini hanya untuk pengujian.

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.StaticCredentialsProvider

suspend fun main() {
    // Masukkan AccessKey ID dan AccessKey Secret sementara yang diperoleh
    // Perhatikan bahwa Access Key ID yang diperoleh dari layanan STS diawali dengan STS
    val stsAccessKeyId = "STS.****************"
    val stsAccessKeySecret = "yourAccessKeySecret"
    val stsSecurityToken = "yourSecurityToken"

    // Buat penyedia kredensial statis, atur secara eksplisit kunci akses sementara dan token keamanan STS
    val credentialsProvider = StaticCredentialsProvider(
        accessKeyId = stsAccessKeyId,
        accessKeySecret = stsAccessKeySecret,
        securityToken = stsSecurityToken
    )

    val config = ClientConfiguration.loadDefault().apply {
        this.region = "cn-hangzhou"  // Tentukan wilayah tempat bucket berada
        this.credentialsProvider = credentialsProvider
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Use custom credentials

Jika jenis kredensial bawaan tidak memenuhi kebutuhan Anda, implementasikan antarmuka CredentialsProvider untuk membuat penyedia kredensial kustom.

Implementasikan antarmuka CredentialsProvider

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.Credentials
import com.aliyun.kotlin.sdk.service.oss2.credentials.CredentialsProvider

class CustomCredentialsProvider : CredentialsProvider {
    
    override suspend fun getCredentials(): Credentials {
        // TODO: implementasikan logika pengambilan kredensial kustom Anda
        
        // Kembalikan kredensial jangka panjang
        return Credentials("access_key_id", "access_key_secret")
        
        // Kembalikan kredensial sementara STS (jika diperlukan)
        // Untuk kredensial sementara, lakukan refresh berdasarkan waktu kedaluwarsa
        // return Credentials("sts_access_key_id", "sts_access_key_secret", "security_token")
    }
}

suspend fun main() {
    // Buat penyedia kredensial kustom
    val credentialsProvider = CustomCredentialsProvider()

    val config = ClientConfiguration.loadDefault().apply {
        this.region = "cn-hangzhou"  // Tentukan wilayah tempat bucket berada
        this.credentialsProvider = credentialsProvider
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Gunakan RefreshCredentialsProvider untuk refresh otomatis

Bungkus penyedia kredensial Anda dengan RefreshCredentialsProvider agar dilakukan refresh secara otomatis:

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.CredentialsProvider
import com.aliyun.kotlin.sdk.service.oss2.credentials.RefreshCredentialsProvider
import kotlin.time.Duration.Companion.seconds

suspend fun main() {
    // Penyedia kredensial asli Anda
    val baseProvider: CredentialsProvider = CustomCredentialsProvider()
    
    // Bungkus dengan RefreshCredentialsProvider untuk melakukan refresh kredensial secara otomatis
    // Interval refresh default adalah 300 detik
    val credentialsProvider = RefreshCredentialsProvider(
        provider = baseProvider,
        refreshInterval = 300.seconds
    )

    val config = ClientConfiguration.loadDefault().apply {
        this.region = "cn-hangzhou"
        this.credentialsProvider = credentialsProvider
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
    }
}

Anonymous access

Akses sumber daya OSS public-read tanpa kredensial:

import com.aliyun.kotlin.sdk.service.oss2.ClientConfiguration
import com.aliyun.kotlin.sdk.service.oss2.OSSClient
import com.aliyun.kotlin.sdk.service.oss2.credentials.AnonymousCredentialsProvider

suspend fun main() {
    // Buat penyedia kredensial anonim
    val credentialsProvider = AnonymousCredentialsProvider()

    val config = ClientConfiguration.loadDefault().apply {
        this.region = "cn-hangzhou"  // Tentukan wilayah tempat bucket berada
        this.credentialsProvider = credentialsProvider
    }

    OSSClient.create(config).use { client ->
        // Gunakan client yang telah dibuat untuk operasi selanjutnya...
        // Catatan: akses anonim hanya dapat mengakses sumber daya yang memiliki izin public-read
    }
}

Jalankan contoh

Jalankan contoh CLI

# Build the project 
./gradlew :sample:cli:build

# Masuk ke direktori program contoh 
cd sample/cli/build/libs/

# Konfigurasikan kredensial akses melalui variabel lingkungan
export OSS_ACCESS_KEY_ID="your access key id"
export OSS_ACCESS_KEY_SECRET="your access key secret"

# Menggunakan ListBuckets sebagai contoh
java -jar cli-jvm.jar ListBuckets --region cn-hangzhou

Jalankan contoh UI

> - Jalankan `sample.composeApp` atau `sample[jvm]`
> - Masukkan `AccessKeyId`, `AccessKeySecret`, dan `Region`
> - Klik `Set Client` untuk menyelesaikan inisialisasi client
> - Menggunakan ListObjects sebagai contoh, masukkan nama bucket dan klik `ListObjects`

Contoh kode

Category

Description

Sample code

Bucket

Buat bucket

PutBucket.kt

Daftar bucket

ListBuckets.kt

Dapatkan info bucket

GetBucketInfo.kt

Dapatkan lokasi bucket

GetBucketLocation.kt

Dapatkan statistik penyimpanan bucket

GetBucketStat.kt

Hapus bucket

DeleteBucket.kt

Periksa apakah bucket ada

IsBucketExist.kt

Upload

Unggah sederhana

PutObject.kt

Unggah Tambahan

AppendObject.kt

Unggah multi-bagian - Inisiasi

InitiateMultipartUpload.kt

Unggah multi-bagian - Unggah bagian

UploadPart.kt

Unggah multi-bagian - Selesaikan

CompleteMultipartUpload.kt

Daftar unggah multi-bagian

ListMultipartUploads.kt

Daftar bagian yang diunggah

ListParts.kt

Batalkan unggah multi-bagian

AbortMultipartUpload.kt

Download

Unduh sederhana

GetObject.kt

Unduh ke file lokal

GetObjectToFile.kt

Object management

Salin objek

CopyObject.kt

Periksa apakah objek ada (HeadObject)

HeadObject.kt

Periksa apakah objek ada (IsObjectExist)

IsObjectExist.kt

Daftar objek

ListObjects.kt

Daftar objek V2

ListObjectsV2.kt

Hapus objek

DeleteObject.kt

Hapus beberapa objek

DeleteMultipleObjects.kt

Dapatkan metadata objek

GetObjectMeta.kt

Archive

Pulihkan objek

RestoreObject.kt

Symbolic link

Buat tautan simbolik

PutSymlink.kt

Dapatkan tautan simbolik

GetSymlink.kt

Object tagging

Tetapkan tag objek

PutObjectTagging.kt

Dapatkan tag objek

GetObjectTagging.kt

Hapus tag objek

DeleteObjectTagging.kt

Access control

Tetapkan ACL bucket

PutBucketAcl.kt

Dapatkan ACL bucket

GetBucketAcl.kt

Tetapkan ACL objek

PutObjectAcl.kt

Dapatkan ACL objek

GetObjectAcl.kt

Versioning

Atur Pengendalian Versi

PutBucketVersioning.kt

Dapatkan status Pengendalian versi

GetBucketVersioning.kt

Presigning

Hasilkan URL yang ditandatangani sebelumnya

Presign.kt

System

Kueri informasi Titik akhir

DescribeRegions.kt