全部產品
Search
文件中心

Object Storage Service:OSS Java SDK V2(預覽版)

更新時間:Dec 31, 2025

使用 OSS Java SDK V2 在 Java 應用中接入阿里雲Object Storage Service,實現檔案的上傳、下載和管理功能,適合網站、企業和開發人員進行雲端檔案儲存體操作。

Github | OSS SDK for Java API | mvnrepository | deepwiki

快速接入

接入OSS Java SDK V2的流程如下:

image

環境準備

Java 8 及以上版本。

通過java -version命令查看 Java 版本。如果當前環境沒有 Java 或版本低於 Java 8,請下載並安裝Java

安裝SDK

建議使用 Maven 方式安裝 OSS Java SDK V2。

Maven

pom.xml 添加如下依賴,並將 <version> 替換為在 Maven Repository 查詢到的最新版本號碼:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>alibabacloud-oss-v2</artifactId>
    <version><!-- 填寫最新版本號碼--></version>
</dependency>

源碼

Github 擷取最新版本的 OSS Java SDK V2,並通過 Maven 構建和安裝:

mvn clean install -DskipTests -Dgpg.skip=true

配置訪問憑證

將 RAM 使用者的 AccessKey 寫入環境變數作為憑證。

RAM 控制台,建立使用永久 AccessKey 訪問的 RAM 使用者,儲存 AccessKey,然後為該使用者授予AliyunOSSFullAccess許可權。

Linux

  1. 在命令列介面執行以下命令來將環境變數設定追加到~/.bashrc 檔案中。

    echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
    echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
    1. 執行以下命令使變更生效。

      source ~/.bashrc
    2. 執行以下命令檢查環境變數是否生效。

      echo $OSS_ACCESS_KEY_ID
      echo $OSS_ACCESS_KEY_SECRET

macOS

  1. 在終端中執行以下命令,查看預設Shell類型。

    echo $SHELL
    1. 根據預設Shell類型進行操作。

      Zsh

      1. 執行以下命令來將環境變數設定追加到~/.zshrc檔案中。

        echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.zshrc
        echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.zshrc
      2. 執行以下命令使變更生效。

        source ~/.zshrc
      3. 執行以下命令檢查環境變數是否生效。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

      Bash

      1. 執行以下命令來將環境變數設定追加到~/.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. 執行以下命令使變更生效。

        source ~/.bash_profile
      3. 執行以下命令檢查環境變數是否生效。

        echo $OSS_ACCESS_KEY_ID
        echo $OSS_ACCESS_KEY_SECRET

Windows

CMD

  1. 在CMD中運行以下命令。

    setx OSS_ACCESS_KEY_ID "YOUR_ACCESS_KEY_ID"
    setx OSS_ACCESS_KEY_SECRET "YOUR_ACCESS_KEY_SECRET"
    1. 運行以下命令,檢查環境變數是否生效。

      echo %OSS_ACCESS_KEY_ID%
      echo %OSS_ACCESS_KEY_SECRET%

PowerShell

  1. 在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. 運行以下命令,檢查環境變數是否生效。

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

初始化用戶端

使用地區初始化 OSSClient。

  • OSSClient 實現了 AutoCloseable,建立執行個體,採用 try resource 方式使用時,會自動釋放資源,無需手動調用 close。

  • OSSClient 建立和銷毀是耗時的,可採用單例模式,複用 OSSClient,但應用終止前必須手動調用 close,否則資源會泄漏。

    單例模式

    public class OssClientSingleton {
        private OssClientSingleton() {}
    
        private static class Holder {
            private static final OSSClient INSTANCE = OSSClient.newBuilder()
                .credentialsProvider(new EnvironmentVariableCredentialsProvider())
                .region("cn-hangzhou")
                .build();
        }
    
        public static OSSClient getInstance() {
            return Holder.INSTANCE;
        }
    
        // 關閉 OSSClient(需顯式調用)
        public static void shutdown() {
            try {
                getInstance().close();
            } catch (Exception e) {
                // 處理關閉異常
            }
        }
    }
    

同步 OSSClient

如果需要等操作執行完成後再進行後續處理,選擇同步 OSSClient。

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 = "cn-hangzhou";

        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

如果需要並發處理多個 OSS 操作,且不依賴每個操作的結果,可以選擇非同步 OSSClient。

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 = "cn-hangzhou";
        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);
        }
    }
}

運行後將會看到當前帳號在所有地區下的 Bucket:

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

用戶端配置

用戶端支援哪些配置?

參數名

說明

region

(必選)請求發送的地區,必選

credentialsProvider

(必選)設定訪問憑證

endpoint

訪問網域名稱

httpClient

HTTP用戶端

retryMaxAttempts

HTTP請求時的最大嘗試次數,預設值為 3

retryer

HTTP請求時的重試實現

connectTimeout

建立串連的逾時時間,預設值為 5 秒

readWriteTimeout

應用讀寫資料的逾時時間,預設值為 20 秒

insecureSkipVerify

是否跳過SSL認證校正,預設檢查SSL認證

enabledRedirect

是否開啟HTTP重新導向,預設不開啟

signatureVersion

簽名版本,預設值為v4

disableSsl

不使用https請求,預設使用https

usePathStyle

使用路徑請求風格,即次層網域請求風格,預設為bucket託管網域名稱

useCName

是否使用自訂網域名訪問,預設不使用

useDualStackEndpoint

是否使用雙棧網域名稱訪問,預設不使用

useAccelerateEndpoint

是否使用傳輸加速網域名稱訪問,預設不使用

useInternalEndpoint

是否使用內網網域名稱訪問,預設不使用

additionalHeaders

指定額外的簽章要求頭,V4簽名下有效

userAgent

指定額外的User-Agent資訊

使用自訂網域名

使用OSS預設網域名稱訪問時,可能會出現檔案禁止訪問、檔案無法預覽等問題;通過通過自訂網域名訪問OSS,不僅支援瀏覽器直接預覽檔案,還可結合CDN加速分發。

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        String region = "cn-hangzhou";

        // 請填寫您的自訂網域名。例如www.example-***.com
        String endpoint = "https://www.example-***.com";

        // 使用配置好的資訊建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                // 請注意,設定true開啟CNAME選項,否則無法使用自訂網域名
                .useCName(true)
                .build()) {

            // 使用建立好的client執行後續操作...

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

逾時控制

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) {
        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        String region = "cn-hangzhou";

        // 使用配置好的資訊建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                // 設定建立串連的逾時時間, 預設值 5秒
                .connectTimeout(Duration.ofSeconds(30))
                // 設定應用讀寫資料的逾時時間, 預設值 20秒
                .readWriteTimeout(Duration.ofSeconds(30))
                .build()) {

            // 使用建立好的client執行後續操作...

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

重試策略

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) {
        /*
         * SDK 重試策略配置說明:
         *
         * 預設重試策略:
         * 當沒有配置重試策略時,SDK 使用 StandardRetryer 作為用戶端的預設實現,其預設配置如下:
         * - maxAttempts:設定最大嘗試次數。預設為3次
         * - maxBackoff:設定最大退避時間(單位:秒)。預設為20秒
         * - baseDelay:設定基礎延遲時間(單位:秒)。預設為0.2秒
         * - backoffDelayer:設定退避演算法。預設使用FullJitter退避演算法
         *   計算公式為:[0.0, 1.0) * min(2^attempts * baseDelay, maxBackoff)
         * - errorRetryables:可重試的錯誤類型,包括HTTP狀態代碼、服務錯誤碼、用戶端錯誤等
         *
         * 當發生可重試錯誤時,將使用其提供的配置來延遲並隨後重試該請求。
         * 請求的總體延遲會隨著重試次數而增加,如果預設配置不滿足您的情境需求時,
         * 可配置重試參數或者修改重試實現。
         */

        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        String region = "cn-hangzhou";

        // 配置重試策略樣本:

        // 1. 自訂最大重試次數(預設為3次,這裡設定為5次)
        Retryer customRetryer = StandardRetryer.newBuilder()
                .maxAttempts(5)
                .build();

        // 2. 自訂退避延遲時間
        // 調整基礎延遲時間 baseDelay 為0.5秒(預設0.2秒),最大退避時間 maxBackoff 為25秒(預設20秒)
        // Retryer customRetryer = StandardRetryer.newBuilder()
        //         .backoffDelayer(new FullJitterBackoff(Duration.ofMillis(500), Duration.ofSeconds(25)))
        //         .build();

        // 3. 自訂退避演算法
        // 使用固定時間退避演算法替代預設的FullJitter演算法,每次延遲2秒
        // Retryer customRetryer = StandardRetryer.newBuilder()
        //         .backoffDelayer(new FixedDelayBackoff(Duration.ofSeconds(2)))
        //         .build();

        // 4. 禁用重試策略
        // 如需禁用所有重試嘗試時,可以使用NopRetryer實現
        // Retryer customRetryer = new NopRetryer();

        // 使用配置好的資訊建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .retryer(customRetryer)
                .build()) {

            // 使用建立好的client執行後續操作...

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

HTTP/HTTPS 協議

使用disableSsl(true)設定不使用HTTPS協議。

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        String region = "cn-hangzhou";

        // 使用配置好的資訊建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                // 設定不使用https請求
                .disableSsl(true)
                .build()) {

            // 使用建立好的client執行後續操作...

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

使用內網網域名稱

使用內網網域名稱訪問同地區的OSS資源,可以降低流量成本並提高訪問速度。

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 方式一: 填寫Region並設定useInternalEndpoint為true
        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        String region = "cn-hangzhou";

        // // 方式二: 直接填寫Region和Endpoint
        // // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        // String region = "cn-hangzhou";
        // // 填寫Bucket所在地區對應的內網Endpoint。以華東1(杭州)為例,Endpoint填寫為'oss-cn-hangzhou-internal.aliyuncs.com'
        // String endpoint = "oss-cn-hangzhou-internal.aliyuncs.com";

        // 使用配置好的資訊建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .useInternalEndpoint(true)
                // .endpoint(endpoint) // 如果使用方式二,取消注釋此行並注釋上一行
                .build()) {

            // 使用建立好的client執行後續操作...

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

使用傳輸加速網域名稱

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 方式一: 填寫Region並設定useAccelerateEndpoint為true
        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        String region = "cn-hangzhou";

        // // 方式二: 直接填寫Region和傳輸加速Endpoint
        // // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        // String region = "cn-hangzhou";
        // // 填寫Bucket所在地區對應的傳輸加速Endpoint,例如'https://oss-accelerate.aliyuncs.com'
        // String endpoint = "https://oss-accelerate.aliyuncs.com";

        // 使用配置好的資訊建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .useAccelerateEndpoint(true)
                // .endpoint(endpoint) // 如果使用方式二,取消注釋此行並注釋上一行
                .build()) {

            // 使用建立好的client執行後續操作...

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

使用專有域

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        String region = "cn-hangzhou";

        // 請填寫您的專有域。例如:https://service.corp.example.com
        String endpoint = "https://service.corp.example.com";

        // 使用配置好的資訊建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                .build()) {

            // 使用建立好的client執行後續操作...

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

使用政務雲網域名稱

以下是使用政務雲網域名稱配置OSSClient的範例程式碼。

import com.aliyun.sdk.service.oss2.*;
import com.aliyun.sdk.service.oss2.credentials.*;

public class Example {
    public static void main(String[] args) {
        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 填寫Region和Endpoint
        // 填寫Bucket所在地區。以華北2 阿里政務雲1為例,Region填寫為cn-north-2-gov-1
        String region = "cn-north-2-gov-1";
        // 填寫Bucket所在地區對應的內網Endpoint。以華北2 阿里政務雲1為例,Endpoint填寫為'https://oss-cn-north-2-gov-1-internal.aliyuncs.com',
        // 如需指定為http協議,請在指定網域名稱時填寫為'http://oss-cn-north-2-gov-1-internal.aliyuncs.com'
        String endpoint = "https://oss-cn-north-2-gov-1-internal.aliyuncs.com";

        // 使用配置好的資訊建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .endpoint(endpoint)
                .build()) {

            // 使用建立好的client執行後續操作...

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

自訂HTTPClient

當常用配置參數無法滿足情境需求時,您可以使用自訂 HTTP 用戶端。

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) {
        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();

        // 填寫Bucket所在地區。以華東1(杭州)為例,Region填寫為cn-hangzhou
        String region = "cn-hangzhou";

        // 設定HTTP用戶端的參數
        HttpClientOptions httpClientOptions = HttpClientOptions.custom()
                // 連線逾時, 預設值 5秒
                .connectTimeout(Duration.ofSeconds(30))
                // 應用讀寫資料的逾時時間, 預設值 20秒
                .readWriteTimeout(Duration.ofSeconds(30))
                // 最大串連數,預設值 1024
                .maxConnections(2048)
                // 是否跳過認證檢查,預設不跳過
                .insecureSkipVerify(false)
                // 是否開啟啟HTTP重新導向,預設不啟用
                .redirectsEnabled(false)
                // 設定Proxy 伺服器
                // .proxyHost("http://user:passswd@proxy.example-***.com")
                .build();

        // 建立HTTP用戶端,並傳入HTTP用戶端參數
        HttpClient httpClient = Apache5HttpClientBuilder.create()
                .options(httpClientOptions)
                .build();

        // 使用配置好的資訊建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region(region)
                .httpClient(httpClient)
                .build()) {

            // 使用建立好的client執行後續操作...

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

訪問憑證配置

阿里雲Object Storage Service Java SDK V2 提供多種訪問憑證配置方式。請根據您的認證和授權需求選擇合適的初始化方式。

如何選擇訪問憑證?

憑證提供者初始化方式

適用情境

Java SDK V2支援情況

底層實現基於的憑證

憑證有效期間

憑證輪轉或重新整理方式

使用RAM使用者的AK

部署運行在安全、穩定且不易受外部攻擊的環境的應用程式,無需頻繁輪轉憑證就可以長期訪問雲端服務

內建支援

AK

長期

手動輪轉

使用STS臨時訪問憑證

部署運行在不可信的環境的應用程式,希望能控制訪問的有效期間、許可權

內建支援

STS Token

臨時

手動重新整理

使用RAMRoleARN憑證

跨帳號訪問OSS資源,需要通過扮演RAM角色擷取臨時憑證

擴充支援

STS Token

臨時

自動重新整理

使用ECSRAMRole憑證

運行在ECS執行個體、ECI執行個體或Container ServiceKubernetes版的應用程式

擴充支援

STS Token

臨時

自動重新整理

使用OIDCRoleARN憑證

Container ServiceKubernetes版中的RRSA功能,實現Pod層級的許可權隔離

擴充支援

STS Token

臨時

自動重新整理

使用自訂訪問憑證

如果以上憑證配置方式都不滿足要求時,您可以自訂擷取憑證的方式

內建支援

自訂

自訂

自訂

匿名訪問

訪問公用讀取許可權的OSS資源,無需提供任何憑證

內建支援

標註為擴充支援的憑證功能需要通過自訂訪問憑證方式結合阿里雲憑證管理庫來實現。SDK內建支援基礎的憑證配置方式,擴充功能可通過整合credentials-java庫實現。

使用RAM使用者的AK

如果您的應用程式部署運行在安全、穩定且不易受外部攻擊的環境中,需要長期訪問您的OSS,且不能頻繁輪轉憑證時,您可以使用阿里雲主帳號或RAM使用者的AK(Access Key ID、Access Key Secret)初始化憑證提供者。需要注意的是,該方式需要您手動維護一個AK,存在安全性風險和維護複雜度增加的風險。

重要
  • 阿里雲帳號擁有資源的全部許可權,AK一旦泄露,會給系統帶來巨大風險,不建議使用。推薦使用最小化授權的RAM使用者的AK。

  • 如需建立RAM使用者的AK,請直接存取建立AccessKey。RAM使用者的Access Key ID、Access Key Secret資訊僅在建立時顯示,請及時儲存,如若遺忘請考慮建立新的AK進行輪換。

環境變數配置

Linux/macOS

  1. 使用RAM使用者AccessKey配置環境變數:

    export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'
    export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'
  2. 執行以下命令檢查環境變數是否生效:

    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)

程式碼範例

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) {
        // 從環境變數中載入憑證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // 建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區
                .build()) {
            
            // 使用建立好的client執行後續操作...
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

靜態憑證配置

以下範例程式碼展示了如何對訪問憑據直接進行寫入程式碼,顯式設定要使用的存取金鑰。

警告

請勿將訪問憑據嵌入到生產環境的應用程式中,此方法僅用於測試目的。

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) {
        // 建立靜態憑證提供者,顯式設定存取金鑰
        // 請替換為您的RAM使用者的AccessKey ID和AccessKey Secret
        CredentialsProvider credentialsProvider = new StaticCredentialsProvider(
                "YOUR_ACCESS_KEY_ID",
                "YOUR_ACCESS_KEY_SECRET"
        );
        
        // 建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區
                .build()) {
            
            // 使用建立好的client執行後續操作...
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

使用STS臨時訪問憑證

如果您的應用程式需要臨時訪問OSS,您可以使用通過STS服務擷取的臨時身份憑證(Access Key ID、Access Key Secret和Security Token)初始化憑證提供者。需要注意的是,該方式需要您手動維護一個STS Token,存在安全性風險和維護複雜度增加的風險。此外,如果您需要多次臨時訪問OSS,您需要手動重新整理STS Token。

環境變數配置

重要
  • 請注意,此處使用的是通過STS服務擷取的臨時身份憑證(Access Key ID、Access Key Secret和Security Token),而非RAM使用者的AK。

  • 請注意區分STS服務擷取的Access Key ID以STS開頭,例如"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>

程式碼範例

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) {
        // 從環境變數中載入訪問OSS所需的認證資訊,用於身分識別驗證
        CredentialsProvider credentialsProvider = new EnvironmentVariableCredentialsProvider();
        
        // 建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區
                .build()) {
            
            // 使用建立好的client執行後續操作...
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

靜態憑證配置

以下範例程式碼展示了如何對訪問憑據直接進行寫入程式碼,顯式設定要使用的臨時存取金鑰。

警告

請勿將訪問憑據嵌入到生產環境的應用程式中,此方法僅用於測試目的。

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) {
        // 填寫擷取的臨時存取金鑰AccessKey ID和AccessKey Secret
        // 請注意區分STS服務擷取的Access Key ID是以STS開頭
        String stsAccessKeyId = "STS.****************";
        String stsAccessKeySecret = "yourAccessKeySecret";
        String stsSecurityToken = "yourSecurityToken";
        
        // 建立靜態憑證提供者,顯式設定臨時存取金鑰和STS安全性權杖
        CredentialsProvider credentialsProvider = new StaticCredentialsProvider(
                stsAccessKeyId,
                stsAccessKeySecret,
                stsSecurityToken
        );
        
        // 建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區
                .build()) {
            
            // 使用建立好的client執行後續操作...
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

使用RAMRoleARN憑證

如果您的應用程式需要授權訪問OSS,例如跨阿里雲帳號訪問OSS,您可以使用RAMRoleARN初始化憑證提供者。該方式底層實現是STS Token。通過指定RAM角色的ARN(Alibabacloud Resource Name),憑證工具會前往STS服務擷取STS Token,並在會話到期前調用AssumeRole介面申請新的STS Token。此外,您還可以通過為policy賦值來限制RAM角色到一個更小的許可權集合。

重要
  • 阿里雲帳號擁有資源的全部許可權,AK一旦泄露,會給系統帶來巨大風險,不建議使用。推薦使用最小化授權的RAM使用者的AK。

  • 如需建立RAM使用者的AK,請直接存取建立AccessKey。RAM使用者的Access Key ID、Access Key Secret資訊僅在建立時顯示,請及時儲存,如若遺忘請考慮建立新的AK進行輪換。

  • 如需擷取RAMRoleARN,請直接存取建立角色

添加依賴

在您的pom.xml中添加阿里雲憑證管理依賴:

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

配置AK和RAMRoleARN作為訪問憑證

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;
// 注意:以下import來自外部依賴 credentials-java
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // 配置RAMRoleARN憑證
        Config credentialConfig = new Config()
                .setType("ram_role_arn")
                // 從環境變數中擷取RAM使用者的存取金鑰(AccessKey ID和AccessKey Secret)
                .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
                .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
                // 要扮演的RAM角色ARN,樣本值:acs:ram::123456789012****:role/adminrole
                // 可以通過環境變數ALIBABA_CLOUD_ROLE_ARN設定RoleArn
                .setRoleArn("acs:ram::123456789012****:role/adminrole")
                // 角色會話名稱,可以通過環境變數ALIBABA_CLOUD_ROLE_SESSION_NAME設定RoleSessionName
                .setRoleSessionName("your-session-name")
                // 設定更小的權限原則,非必填。樣本值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // 設定角色會話有效期間,單位為秒,預設值為3600秒(1小時),非必填
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

        // 建立憑證提供者,用於動態載入憑證
        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("擷取憑證失敗", e);
            }
        });

        // 建立OSS用戶端執行個體
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區,以華東1(杭州)為例
                .build()) {
            
            // 使用client進行後續操作...
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

使用ECSRAMRole憑證

如果您的應用程式運行在ECS執行個體、ECI執行個體、Container ServiceKubernetes版的Worker節點中,建議您使用ECSRAMRole初始化憑證提供者。該方式底層實現是STS Token。ECSRAMRole允許您將一個角色關聯到ECS執行個體、ECI執行個體或Container Service Kubernetes 版的Worker節點,實現在執行個體內部自動重新整理STS Token。該方式無需您提供一個AK或STS Token,消除了手動維護AK或STS Token的風險。如何擷取ECSRAMRole,請參見建立角色

添加依賴

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

配置ECSRAMRole作為訪問憑證

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;
// 注意:以下import來自外部依賴 credentials-java
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // 配置ECSRAMRole憑證
        Config credentialConfig = new Config()
                .setType("ecs_ram_role")      // 訪問憑證類型。固定為ecs_ram_role
                .setRoleName("EcsRoleExample"); // 為ECS授予的RAM角色的名稱。選擇性參數。如果不設定,將自動檢索。強烈建議設定,以減少請求

        Client credentialClient = new Client(credentialConfig);

        // 建立憑證提供者,用於動態載入憑證
        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("擷取憑證失敗", e);
            }
        });

        // 建立OSS用戶端執行個體
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區,以華東1(杭州)為例
                .build()) {
            
            // 使用client進行後續操作...
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

使用OIDCRoleARN憑證

在Container ServiceKubernetes版中設定了Worker節點RAM角色後,對應節點內的Pod中的應用也就可以像ECS上部署的應用一樣,通過中繼資料服務(Meta Data Server)擷取關聯角色的STS Token。但如果容器叢集上部署的是不可信的應用(比如部署您的客戶提交的應用,代碼也沒有對您開放),您可能並不希望它們能通過中繼資料服務擷取Worker節點關聯執行個體RAM角色的STS Token。為了避免影響雲上資源的安全,同時又能讓這些不可信的應用安全地擷取所需的STS Token,實現應用層級的許可權最小化,您可以使用RRSA(RAM Roles for Service Account)功能。該方式底層實現是STS Token。阿里雲容器叢集會為不同的應用Pod建立和掛載相應的服務賬戶OIDC Token檔案,並將相關配置資訊注入到環境變數中,憑證工具通過擷取環境變數的配置資訊,調用STS服務的AssumeRoleWithOIDC介面換取綁定角色的STS Token。該方式無需您提供一個AK或STS Token,消除了手動維護AK或STS Token的風險。詳情請參見通過RRSA配置ServiceAccount的RAM許可權實現Pod許可權隔離

添加依賴

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

配置OIDCRoleARN作為訪問憑證

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;
// 注意:以下import來自外部依賴 credentials-java
import com.aliyun.credentials.Client;
import com.aliyun.credentials.models.Config;

public class OSSExample {
    public static void main(String[] args) {
        // 配置OIDCRoleARN憑證
        Config credentialConfig = new Config()
                // 指定Credential類型,固定值為oidc_role_arn
                .setType("oidc_role_arn")
                // RAM角色名稱ARN,可以通過環境變數ALIBABA_CLOUD_ROLE_ARN設定RoleArn
                .setRoleArn(System.getenv("ALIBABA_CLOUD_ROLE_ARN"))
                // OIDC供應商ARN,可以通過環境變數ALIBABA_CLOUD_OIDC_PROVIDER_ARN設定OidcProviderArn
                .setOidcProviderArn(System.getenv("ALIBABA_CLOUD_OIDC_PROVIDER_ARN"))
                // OIDC Token檔案路徑,可以通過環境變數ALIBABA_CLOUD_OIDC_TOKEN_FILE設定OidcTokenFilePath
                .setOidcTokenFilePath(System.getenv("ALIBABA_CLOUD_OIDC_TOKEN_FILE"))
                // 角色會話名稱,可以通過環境變數ALIBABA_CLOUD_ROLE_SESSION_NAME設定RoleSessionName
                .setRoleSessionName("your-session-name")
                // 設定更小的權限原則,非必填。樣本值:{"Statement": [{"Action": ["*"],"Effect": "Allow","Resource": ["*"]}],"Version":"1"}
                .setPolicy("{\"Statement\": [{\"Action\": [\"*\"],\"Effect\": \"Allow\",\"Resource\": [\"*\"]}],\"Version\":\"1\"}")
                // 設定角色會話有效期間,單位為秒,預設值為3600秒(1小時),非必填
                .setRoleSessionExpiration(3600);

        Client credentialClient = new Client(credentialConfig);

        // 建立憑證提供者,用於動態載入憑證
        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("擷取憑證失敗", e);
            }
        });

        // 建立OSS用戶端執行個體
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區,以華東1(杭州)為例
                .build()) {
            
            // 使用client進行後續操作...
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

使用自訂訪問憑證

當以上憑證配置方式不滿足要求時,您可以自訂擷取憑證的方式。Java SDK支援多種實現方式。

通過Supplier介面實現

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) {
        // 建立自訂憑證提供者
        CredentialsProvider credentialsProvider = new CredentialsProviderSupplier(() -> {
            // TODO: 實現您的自訂憑證擷取邏輯
            
            // 返回長期憑證
            return new Credentials("access_key_id", "access_key_secret");
            
            // 返回STS臨時憑證(如果需要)
            // return new Credentials("sts_access_key_id", "sts_access_key_secret", "security_token");
        });
        
        // 建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區
                .build()) {
            
            // 使用建立好的client執行後續操作...
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

實現CredentialsProvider介面

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: 實現您的自訂憑證擷取邏輯
        
        // 返回長期憑證
        return new Credentials("access_key_id", "access_key_secret");
        
        // 返回STS臨時憑證(如果需要)
        // 對於臨時憑證,需要根據到期時間,重新整理憑證
        // return new Credentials("sts_access_key_id", "sts_access_key_secret", "security_token");
    }
}

public class OSSExample {
    public static void main(String[] args) {
        // 建立自訂憑證提供者
        CredentialsProvider credentialsProvider = new CustomCredentialsProvider();
        
        // 建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區
                .build()) {
            
            // 使用建立好的client執行後續操作...
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

匿名訪問

如果您只需要訪問公用讀取許可權的OSS資源,可以使用匿名訪問方式,無需提供任何憑證。

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) {
        // 建立匿名憑證提供者
        CredentialsProvider credentialsProvider = new AnonymousCredentialsProvider();
        
        // 建立OSS用戶端
        try (OSSClient client = OSSClient.newBuilder()
                .credentialsProvider(credentialsProvider)
                .region("cn-hangzhou") // 填寫Bucket所在地區
                .build()) {
            
            // 使用建立好的client執行後續操作...
            // 注意:匿名訪問只能訪問具有公用讀取許可權的資源
            
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
        }
    }
}

範例程式碼

功能分類

樣本說明

同步版本

非同步版本

儲存空間

建立儲存空間

PutBucket.java

PutBucketAsync.java

列舉儲存空間

ListBuckets.java

ListBucketsAsync.java

擷取儲存空間資訊

GetBucketInfo.java

GetBucketInfoAsync.java

擷取儲存空間地區

GetBucketLocation.java

GetBucketLocationAsync.java

擷取儲存容量統計

GetBucketStat.java

GetBucketStatAsync.java

刪除儲存空間

DeleteBucket.java

DeleteBucketAsync.java

檔案上傳

簡單上傳

PutObject.java

PutObjectAsync.java

追加上傳

AppendObject.java

AppendObjectAsync.java

分區上傳

MultipartUpload.java

MultipartUploadAsync.java

列舉分區上傳任務

ListMultipartUploads.java

ListMultipartUploadsAsync.java

列舉已上傳分區

ListParts.java

ListPartsAsync.java

取消分區上傳

AbortMultipartUpload.java

AbortMultipartUploadAsync.java

檔案下載

簡單下載

GetObject.java

GetObjectAsync.java

檔案管理

拷貝檔案

CopyObject.java

CopyObjectAsync.java

判斷檔案是否存在

HeadObject.java

HeadObjectAsync.java

列舉檔案

ListObjects.java

ListObjectsAsync.java

列舉檔案V2

ListObjectsV2.java

ListObjectsV2Async.java

刪除檔案

DeleteObject.java

DeleteObjectAsync.java

大量刪除檔案

DeleteMultipleObjects.java

DeleteMultipleObjectsAsync.java

擷取檔案中繼資料

GetObjectMeta.java

GetObjectMetaAsync.java

歸檔檔案

解凍檔案

RestoreObject.java

RestoreObjectAsync.java

清理已解凍檔案

CleanRestoredObject.java

CleanRestoredObjectAsync.java

軟連結

建立軟連結

PutSymlink.java

PutSymlinkAsync.java

擷取軟連結

GetSymlink.java

GetSymlinkAsync.java

對象標籤

設定對象標籤

PutObjectTagging.java

PutObjectTaggingAsync.java

擷取對象標籤

GetObjectTagging.java

GetObjectTaggingAsync.java

刪除對象標籤

DeleteObjectTagging.java

DeleteObjectTaggingAsync.java

存取控制

設定儲存空間ACL

PutBucketAcl.java

PutBucketAclAsync.java

擷取儲存空間ACL

GetBucketAcl.java

GetBucketAclAsync.java

設定檔案ACL

PutObjectAcl.java

PutObjectAclAsync.java

擷取檔案ACL

GetObjectAcl.java

GetObjectAclAsync.java

版本控制

設定版本控制

PutBucketVersioning.java

PutBucketVersioningAsync.java

擷取版本控制狀態

GetBucketVersioning.java

GetBucketVersioningAsync.java

列舉檔案版本

ListObjectVersions.java

ListObjectVersionsAsync.java

跨域訪問

設定CORS規則

PutBucketCors.java

PutBucketCorsAsync.java

擷取CORS規則

GetBucketCors.java

GetBucketCorsAsync.java

刪除CORS規則

DeleteBucketCors.java

DeleteBucketCorsAsync.java

跨域預檢請求

OptionObject.java

OptionObjectAsync.java

系統功能

查詢Endpoint資訊

DescribeRegions.java

DescribeRegionsAsync.java