すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:OSS SDK for Java を使用する

最終更新日:Feb 25, 2025

Object Storage Service (OSS) SDK for Java を使用すると、OSS ストレージ管理機能とデータアクセス機能を Java アプリケーションに簡単に統合できます。このトピックでは、OSS SDK for Java を使用して、バケットとオブジェクトの一般的な管理操作(バケットの作成と削除、オブジェクトのアップロード、ダウンロード、一覧表示、削除など)を実行する方法について説明します。

注意事項

  • OSS でサポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。

  • このトピックでは、環境変数から取得したアクセス認証情報を使用しています。アクセス認証情報の構成方法の詳細については、「アクセス認証情報を構成する」をご参照ください。

  • OSS SDK for Java を使用してリクエストを開始するには、OSSClient インスタンスを初期化する必要があります。このトピックでは、デフォルトの構成を使用して OSSClient を作成します。 OSSClient の構成方法の詳細については、「OSSClient インスタンスを構成する」をご参照ください。

前提条件

環境変数を構成する

  1. AccessKey ペアの環境変数を構成します。

Linux

  1. CLI で次のコマンドを実行して、環境変数の構成を ~/.bashrc ファイルに追加します。

    echo "export OSS_ACCESS_KEY_ID='YOUR_ACCESS_KEY_ID'" >> ~/.bashrc
    echo "export OSS_ACCESS_KEY_SECRET='YOUR_ACCESS_KEY_SECRET'" >> ~/.bashrc
  2. 次のコマンドを実行して変更を適用します。

    source ~/.bashrc
  3. 次のコマンドを実行して、環境変数が有効になっているかどうかを確認します。

    echo $OSS_ACCESS_KEY_ID
    echo $OSS_ACCESS_KEY_SECRET

macOS

  1. ターミナルで次のコマンドを実行して、デフォルトのシェルタイプを表示します。

    echo $SHELL
  2. デフォルトのシェルタイプに基づいて環境変数を構成します。

    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"
  2. 次のコマンドを実行して、環境変数が有効になっているかどうかを確認します。

    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)
  2. 次のコマンドを実行して、環境変数が有効になっているかどうかを確認します。

    [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_ID", [EnvironmentVariableTarget]::User)
    [Environment]::GetEnvironmentVariable("OSS_ACCESS_KEY_SECRET", [EnvironmentVariableTarget]::User)
  1. 上記のように環境変数を構成した後、コンパイル環境とランタイム環境 (IDE、コマンドラインインターフェイス、その他のデスクトップアプリケーション、バックグラウンドサービス) を再起動またはリフレッシュして、最新のシステム環境変数が正常にロードされていることを確認してください。

SDK をインストールする

  1. Java 7 以降をインストールします。

    次のコマンドを実行して、Java のバージョンを確認できます。

    java -version

    Java が環境にインストールされていない場合、または Java のバージョンが V7 より前の場合は、互換性のある Java バージョンをダウンロードしてください。

  2. OSS SDK for Java をインストールします。

    説明

    要件に基づいて、適切なバージョンの OSS SDK for Java を選択してください。このセクションのサンプルコードが正しく実行されるように、最新の OSS SDK for Java V3.17.4 を使用することをお勧めします。

    Maven プロジェクトに依存関係を追加する (推奨)

    Java 7 または 8 で OSS SDK for Java を使用するには、対応する SDK 依存関係を pom.xml ファイルに追加します。 この例では、OSS SDK for Java V3.17.4 の依存関係が追加されています。

    <dependency>
        <groupId>com.aliyun.oss</groupId>
        <artifactId>aliyun-sdk-oss</artifactId>
        <version>3.17.4</version>
    </dependency>

    Java 9 以降を使用する場合は、OSS SDK 依存関係に加えて、次の jaxb 関連の依存関係を追加します。

    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
    <dependency>
        <groupId>javax.activation</groupId>
        <artifactId>activation</artifactId>
        <version>1.1.1</version>
    </dependency>
    <!-- no more than 2.3.3-->
    <dependency>
        <groupId>org.glassfish.jaxb</groupId>
        <artifactId>jaxb-runtime</artifactId>
        <version>2.3.3</version>
    </dependency>

    JAR ファイルを Eclipse プロジェクトにインポートする

    OSS SDK for Java V3.17.4 を使用するには、次の手順を実行して JAR ファイルをプロジェクトにインポートします。

    1. OSS SDK for Java package.zip をダウンロードします。

    2. パッケージを解凍します。

    3. aliyun-sdk-oss-3.17.4.jar ファイルと lib ディレクトリ内のすべてのファイルをプロジェクトにコピーします。

    4. Eclipse で、プロジェクトを選択し、右クリックメニューの [プロパティ] > [java ビルドパス] > [JAR の追加] を選択します。

    5. コピーしたすべての JAR ファイルを選択し、ライブラリにインポートします。

    JAR ファイルを IntelliJ IDEA プロジェクトにインポートする

    OSS SDK for Java V3.17.4 を使用するには、次の手順を実行して JAR ファイルをプロジェクトにインポートします。

    1. OSS SDK for Java.zip パッケージをダウンロードします。

    2. パッケージを解凍します。

    3. aliyun-sdk-oss-3.17.4.jar ファイルと lib ディレクトリ内のすべての JAR ファイルをプロジェクトにコピーします。

    4. IntelliJ IDEA で、プロジェクトを選択し、[ファイル] > [プロジェクト構造] > [モジュール] > [依存関係] > [+] > [JAR またはディレクトリ] を選択します。

    5. コピーしたすべての JAR ファイルを選択し、外部ライブラリにインポートします。

次のサンプルコードは、OSS SDK for Java を使用してバケットを作成および削除し、オブジェクトをアップロード、ダウンロード、一覧表示、および削除する方法を示しています。

import java.io.*;
import java.util.Random;
import com.aliyun.oss.ClientException;
import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import com.aliyun.oss.OSSException;
import com.aliyun.oss.common.auth.CredentialsProviderFactory;
import com.aliyun.oss.common.auth.EnvironmentVariableCredentialsProvider;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectListing;
import com.aliyun.oss.model.OSSObjectSummary;

public class OssJavaSdkQuickStart {
    /** 一意のバケット名を生成します。*/
    public static String generateUniqueBucketName(String prefix) {
        // 現在のタイムスタンプを取得します。
        String timestamp = String.valueOf(System.currentTimeMillis());
        // 0 から 9999 までの乱数を生成します。
        Random random = new Random();
        int randomNum=random.nextInt (10000);
        // 文字列を連結して一意のバケット名を作成します。
        return prefix + "-" + timestamp + "-" + randomNum;
    }

    public static void main(String[] args) throws com.aliyuncs.exceptions.ClientException {
        // OSS エンドポイントとバケット名を指定します。
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        String bucketName = generateUniqueBucketName("demo");
        // リージョンを指定します。
        String region = "cn-hangzhou";
        // OSSClient インスタンスを作成します。
        EnvironmentVariableCredentialsProvider credentialsProvider =
                CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .region(region)
                .build();
        try {
            // 1. バケットを作成します。
            ossClient.createBucket(bucketName);
            System.out.println("1. バケット " + bucketName + " が作成されました。");
            // 2. オブジェクトをアップロードします。
            String objectName = "exampledir/exampleobject.txt";
            String content = "Hello OSS";
            ossClient.putObject(bucketName, objectName, new ByteArrayInputStream(content.getBytes()));
            System.out.println("2. オブジェクト " + objectName + " がアップロードされました。");
            // 3. オブジェクトをダウンロードします。
            OSSObject ossObject = ossClient.getObject(bucketName, objectName);
            InputStream contentStream = ossObject.getObjectContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(contentStream));
            String line;
            System.out.println("3. ダウンロードされたオブジェクトの内容:");
            while ((line = reader.readLine()) != null) {
                System.out.println(line);
            }
            contentStream.close();
            // 4. オブジェクトを一覧表示します。
            System.out.println("4. 一覧表示されたオブジェクト:");
            ObjectListing objectListing = ossClient.listObjects(bucketName);
            for (OSSObjectSummary objectSummary : objectListing.getObjectSummaries()) {
                System.out.println(" - " + objectSummary.getKey() + " (サイズ = " + objectSummary.getSize() + ")");
            }
            // 5. オブジェクトを削除します。
            ossClient.deleteObject(bucketName, objectName);
            System.out.println("5. オブジェクト " + objectName + " が削除されました。");
            // 6. バケットを削除します。
            ossClient.deleteBucket(bucketName);
            System.out.println("6. バケット " + bucketName + " が削除されました。");
        } catch (OSSException oe) {
            System.out.println("OSSException が発生しました。これは、リクエストは OSS に到達しましたが、何らかの理由でエラー応答で拒否されたことを意味します。");
            System.out.println("エラーメッセージ:" + oe.getErrorMessage());
            System.out.println("エラーコード:" + oe.getErrorCode());
            System.out.println("リクエスト ID:" + oe.getRequestId());
            System.out.println("ホスト ID:" + oe.getHostId());
        } catch (ClientException | IOException ce) {
            System.out.println("ClientException が発生しました。これは、クライアントが OSS と通信しようとしているときに、ネットワークにアクセスできないなど、重大な内部問題が発生したことを意味します。");
            System.out.println("エラーメッセージ:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}

以下は、サンプルレスポンスです。

1. バケット demo-1731651903982-4074 が作成されました。
2. オブジェクト exampledir/exampleobject.txt がアップロードされました。
3. ダウンロードされたオブジェクトの内容:
Hello OSS
4. 一覧表示されたオブジェクト:
 - exampledir/exampleobject.txt (サイズ = 9)
5. オブジェクト exampledir/exampleobject.txt が削除されました。
6. バケット demo-1731651903982-4074 が削除されました。

よくある質問

OSS SDK を使用しているときに AccessDenied エラーが報告された場合はどうすればよいですか?

AccessDenied エラーは、通常、アクセス権限が不十分なために発生します。この問題を解決するには、次の手順を実行します。

  1. AccessKey ID と AccessKey Secret を確認します。使用している AccessKey ID と AccessKey Secret が正しいことを確認してください。詳細については、「AccessKey ペアを作成する」をご参照ください。

  2. RAM ユーザーに付与されている権限を確認します。RAM ユーザーに、バケットまたはオブジェクトに対する操作を実行するために必要な権限が付与されていることを確認してください。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

  3. バケットポリシーを確認します。エラーメッセージに「Access denied by bucket policy」が含まれている場合は、バケットポリシーで指定された制限が原因でエラーが発生したことを示します。詳細については、「バケットポリシー」をご参照ください。

  4. その他のタイプのエラーについては、「エラーコード」をご参照ください。たとえば、アクセスコントロールに関連する一般的なエラーについては、「03-ACCESS_CONTROL」セクションを参照できます。