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

Object Storage Service:シンプルアップロード (Android SDK)

最終更新日:Dec 07, 2025

シンプルアップロードでは、`PutObject` メソッドを使用して、オブジェクトと呼ばれる単一のファイルをアップロードします。シンプルアップロードを使用して、ローカルファイルまたはバイナリ byte[] 配列をアップロードできます。

注意事項

  • このトピックのサンプルコードを実行する前に、カスタムドメイン名やセキュリティトークンサービス (STS) などの方法を使用して `OSSClient` インスタンスを作成する必要があります。詳細については、「初期化 (Android SDK)」をご参照ください。

権限

デフォルトでは、Alibaba Cloud アカウントは完全な権限を持っています。Alibaba Cloud アカウント下の RAM ユーザーまたは RAM ロールは、デフォルトではいかなる権限も持っていません。Alibaba Cloud アカウントまたはアカウント管理者は、RAM ポリシーまたはバケットポリシーを通じて操作権限を付与する必要があります。

API

アクション

定義

PutObject

oss:PutObject

オブジェクトをアップロードします。

oss:PutObjectTagging

オブジェクトのアップロード時に x-oss-tagging でオブジェクトタグを指定する場合、この権限が必要です。

kms:GenerateDataKey

オブジェクトをアップロードする際に、オブジェクトのメタデータに X-Oss-Server-Side-Encryption: KMS が含まれている場合は、これら 2 つの権限が必要です。

kms:Decrypt

ローカルファイルのアップロード

ローカルファイルを OSS に同期または非同期でアップロードできます。

同期アップロード

次のコードは、ローカルファイル examplefile.txt を、examplebucket バケット内の exampledir/ フォルダに exampleobject.txt という名前のオブジェクトとして同期的にアップロードする方法を示しています。

// アップロードリクエストを作成します。
// バケット名 (例: examplebucket)、オブジェクトの完全なパス (例: exampledir/exampleobject.txt)、およびローカルファイルの完全なパス (例: /storage/emulated/0/oss/examplefile.txt) を指定します。
// オブジェクトの完全なパスにバケット名を含めることはできません。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

// ファイルのメタデータ設定はオプションです。
 ObjectMetadata metadata = new ObjectMetadata();
// metadata.setContentType("application/octet-stream"); // コンテンツタイプを設定します。
// metadata.setContentMD5(BinaryUtil.calculateBase64Md5(uploadFilePath)); // MD5 ハッシュを検証します。
// オブジェクトのアクセス権限を非公開に設定します。
metadata.setHeader("x-oss-object-acl", "private");
// オブジェクトのストレージクラスを標準 (Standard) に設定します。
metadata.setHeader("x-oss-storage-class", "Standard");
// 同じ名前のオブジェクトの上書きを禁止します。
// metadata.setHeader("x-oss-forbid-overwrite", "true");
// オブジェクトタグを指定します。複数のタグを指定できます。
// metadata.setHeader("x-oss-tagging", "a:1");
// OSS が宛先オブジェクトを作成するために使用するサーバ側暗号化アルゴリズムを指定します。
// metadata.setHeader("x-oss-server-side-encryption", "AES256");
// KMS によって管理されるカスタマーマスターキー (CMK) を指定します。このパラメーターは、x-oss-server-side-encryption が KMS に設定されている場合にのみ有効です。
// metadata.setHeader("x-oss-server-side-encryption-key-id", "9468da86-3509-4f8d-a61e-6eab1eac****");

put.setMetadata(metadata);

try {
    PutObjectResult putResult = oss.putObject(put);

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // クライアント例外 (ネットワーク例外など)。
    e.printStackTrace();
} catch (ServiceException e) {
    // サーバー例外。
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

Android 10 以降のパーティション化されたストレージの場合、ファイル URI を使用してファイルを OSS にアップロードします。

// アップロードリクエストを作成します。
// バケット名 (例: examplebucket) とオブジェクトの完全なパス (例: exampledir/exampleobject.txt) を指定します。
// オブジェクトの完全なパスにバケット名を含めることはできません。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt",fileUri);

// ファイルのメタデータを設定します。
// ObjectMetadata metadata = new ObjectMetadata();
// Content-Type を設定します。
// metadata.setContentType("text/plain"); 
// MD5 ハッシュを検証します。
// metadata.setContentMD5(BinaryUtil.calculateBase64Md5(uploadFilePath)); 
// put.setMetadata(metadata);

try {
    PutObjectResult putResult = oss.putObject(put);

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // クライアント例外 (ネットワーク例外など)。
    e.printStackTrace();
} catch (ServiceException e) {
    // サーバー例外。
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

非同期アップロード

説明

Android では、同期 API 操作は UI スレッドからではなく、サブスレッドから呼び出す必要があります。そうしないと、例外が発生します。UI スレッドから直接アップロードするには、非同期 API 操作を使用します。

次のコードは、ローカルファイル examplefile.txt を、examplebucket バケット内の exampledir/ フォルダに exampleobject.txt という名前のオブジェクトとして非同期的にアップロードする方法を示しています。

// アップロードリクエストを作成します。
// バケット名 (例: examplebucket)、オブジェクトの完全なパス (例: exampledir/exampleobject.txt)、およびローカルファイルの完全なパス (例: /storage/emulated/0/oss/examplefile.txt) を指定します。
// オブジェクトの完全なパスにバケット名を含めることはできません。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", "/storage/emulated/0/oss/examplefile.txt");

// 非同期アップロードの進行状況コールバックを設定できます。
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
    @Override
    public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
        Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});

OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
    @Override
    public void onSuccess(PutObjectRequest request, PutObjectResult result) {
        Log.d("PutObject", "UploadSuccess");
        Log.d("ETag", result.getETag());
        Log.d("RequestId", result.getRequestId());
    }

    @Override
    public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // リクエスト例外。
        if (clientExcepion != null) {
            // クライアント例外 (ネットワーク例外など)。
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            // サーバー例外。
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});
// アップロードタスクをキャンセルします。
// task.cancel(); 
// アップロードタスクが完了するのを待ちます。
// task.waitUntilFinished(); 

Android 10 以降のパーティション化されたストレージの場合、ファイル URI を使用してファイルを OSS にアップロードします。

// アップロードリクエストを作成します。
// バケット名 (例: examplebucket) とオブジェクトの完全なパス (例: exampledir/exampleobject.txt) を指定します。
// オブジェクトの完全なパスにバケット名を含めることはできません。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", fileUri);

// 非同期アップロードの進行状況コールバックを設定できます。
put.setProgressCallback(new OSSProgressCallback<PutObjectRequest>() {
    @Override
    public void onProgress(PutObjectRequest request, long currentSize, long totalSize) {
        Log.d("PutObject", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});

OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
    @Override
    public void onSuccess(PutObjectRequest request, PutObjectResult result) {
        Log.d("PutObject", "UploadSuccess");
        Log.d("ETag", result.getETag());
        Log.d("RequestId", result.getRequestId());
    }

    @Override
    public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // リクエスト例外。
        if (clientExcepion != null) {
            // クライアント例外 (ネットワーク例外など)。
            clientExcepion.printStackTrace();
        }
        if (serviceException != null) {
            // サーバー例外。
            Log.e("ErrorCode", serviceException.getErrorCode());
            Log.e("RequestId", serviceException.getRequestId());
            Log.e("HostId", serviceException.getHostId());
            Log.e("RawMessage", serviceException.getRawMessage());
        }
    }
});
// アップロードタスクをキャンセルします。
// task.cancel(); 
// アップロードタスクが完了するのを待ちます。
// task.waitUntilFinished(); 

バイナリ byte[] 配列のアップロード

次のコードは、バイナリ byte[] 配列を、examplebucket バケット内の exampledir/ フォルダに exampleobject.txt という名前のオブジェクトとして同期的にアップロードする方法を示しています。

byte[] uploadData = new byte[100 * 1024];
new Random().nextBytes(uploadData);

// アップロードリクエストを作成します。
// バケット名 (例: examplebucket) とオブジェクトの完全なパス (例: exampledir/exampleobject.txt) を指定します。
// オブジェクトの完全なパスにバケット名を含めることはできません。
PutObjectRequest put = new PutObjectRequest("examplebucket", "exampledir/exampleobject.txt", uploadData);

try {
    PutObjectResult putResult = oss.putObject(put);

    Log.d("PutObject", "UploadSuccess");
    Log.d("ETag", putResult.getETag());
    Log.d("RequestId", putResult.getRequestId());
} catch (ClientException e) {
    // クライアント例外 (ネットワーク例外など)。
    e.printStackTrace();
} catch (ServiceException e) {
    // サーバー例外。
    Log.e("RequestId", e.getRequestId());
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
}

関連ドキュメント

  • シンプルアップロードの完全なサンプルコードについては、GitHub の例をご参照ください。

  • シンプルアップロードの API 操作の詳細については、「PutObject」をご参照ください。

  • `OSSClient` インスタンスの初期化方法の詳細については、「Android 用 OSSClient インスタンスの初期化」をご参照ください。