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

Object Storage Service:再開可能なアップロード (Android SDK)

最終更新日:Nov 30, 2025

ワイヤレスネットワーク経由での大容量ファイルのアップロードは、時間がかかる場合があります。ネットワークの状態が悪い場合やネットワークが変更された場合、アップロードが失敗し、最初からやり直す必要があります。この問題に対処するため、Android ソフトウェア開発キット (SDK) は再開可能なアップロード機能を提供しています。

注意事項

OSS SDK for Android は、再開可能なアップロードを実行するために、`resumableUpload` と `sequenceUpload` のメソッドを提供しています。

  • (推奨) `resumableUpload` は、複数のパートを並列でアップロードすることを指定します。最大 5 つのパートを並列でアップロードできます。

  • `sequenceUpload` は、パートを順次アップロードすることを指定します。前のパートのアップロードが完了してから、次のパートがアップロードされます。

このトピックでは、`resumableUpload` メソッドを使用した再開可能なアップロードの実行方法の例のみをサンプルコードで提供します。再開可能なアップロードを実行して複数のオブジェクトをアップロードする場合は、複数の `resumableUpload` リクエストを作成する必要があります。

注意事項

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

モバイルデバイスから 5 GB 未満のオブジェクトをアップロードする場合は、再開可能なアップロードを使用しないことを推奨します。再開可能なアップロードは、マルチパートアップロード機能を使用して実装されます。単一オブジェクトの再開可能なアップロードには複数のネットワークリクエストが必要となり、非効率です。再開可能なアップロードを実行して 5 GB を超えるオブジェクトをアップロードする場合は、次の点にご注意ください:

  • 再開可能なアップロード前

    再開可能なアップロードを実行してオブジェクトを OSS にアップロードする前に、再開可能なアップロードの進行状況を保存するチェックポイントファイルのディレクトリを指定できます。チェックポイントファイルは、現在の再開可能なアップロードタスクにのみ適用されます。

    • チェックポイントファイルのディレクトリを指定しない場合、ネットワークの問題でラージオブジェクトの一部のパートのアップロードに失敗すると、オブジェクト全体を再アップロードするために長時間を要し、大量のトラフィックが消費されます。

    • チェックポイントファイルのディレクトリを指定すると、失敗した再開可能なアップロードタスクは、チェックポイントファイルに記録された位置から再開できます。

  • 再開可能なアップロード中

    • 再開可能なアップロードでは、ローカルファイルのみをアップロードできます。再開可能なアップロードはアップロードコールバック機能をサポートしており、これは通常のアップロードタスクと同様に使用されます。詳細については、「コールバック」をご参照ください。

    • 再開可能なアップロードは、InitMultipartUploadUploadPartListPartsCompleteMultipartUploadAbortMultipartUpload の各 API 操作を呼び出すことで実行できます。セキュリティトークンサービス (STS) を使用して再開可能なアップロードを実行する場合は、前述の API 操作を呼び出す権限が付与されていることを確認してください。

    • デフォルトでは、再開可能なアップロードの各パートで MD5 検証が有効になっています。したがって、リクエストに Content-Md5 ヘッダーをセットする必要はありません。

    • 再開可能なアップロードタスクが失敗して完了しなかった場合、アップロードされたパートは OSS で不要になります。この問題を解決するには、パートが保存されているバケットにライフサイクルルールを設定して、パートを定期的に削除できます。詳細については、「ライフサイクルルールの設定」をご参照ください。

再開可能なアップロードを実行することで、ローカルファイルを同期または非同期で OSS にアップロードできます。

同期メソッド

次のサンプルコードは、`examplefile.txt` という名前のローカルファイルを `examplebucket` バケットの `exampledir` ディレクトリに同期的にアップロードする方法の例です。ローカルファイルがアップロードされると、オブジェクト名は `exampleobject.txt` になります。チェックポイントファイルはご利用のコンピューターに保存されます。

// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。 完全なパスにバケット名を含めることはできません。
String objectName = "exampledir/exampleobject.txt";
// ファイルの完全なパスを指定します。例: /storage/emulated/0/oss/examplefile.txt。
String localFilepath = "/storage/emulated/0/oss/examplefile.txt";

String recordDirectory = Environment.getExternalStorageDirectory().getAbsolutePath() + "/oss_record/";

File recordDir = new File(recordDirectory);

// ブレークポイントレコードを保存するフォルダが存在することを確認します。フォルダが存在しない場合は作成します。
if (!recordDir.exists()) {
    recordDir.mkdirs();
}

// 再開可能なアップロードリクエストを作成し、ブレークポイントレコードファイルを保存するパスを指定します。パスは絶対パスである必要があります。
ResumableUploadRequest request = new ResumableUploadRequest(bucketName, objectName, localFilepath, recordDirectory);
// OSSAsyncTask の cancel() メソッドを呼び出す際に DeleteUploadOnCancelling を false に設定すると、ブレークポイントレコードファイルの削除が防止されます。これにより、次回同じファイルをアップロードする際に、ブレークポイントからアップロードを再開できます。このパラメーターを設定しない場合のデフォルト値は true で、ブレークポイントレコードファイルは削除されます。その結果、次回同じファイルをアップロードする際は、最初からアップロードが開始されます。
request.setDeleteUploadOnCancelling(false);
// アップロードのコールバックを設定します。
request.setProgressCallback(new OSSProgressCallback<ResumableUploadRequest>() {
    @Override
    public void onProgress(ResumableUploadRequest request, long currentSize, long totalSize) {
        Log.d("resumableUpload", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});


ResumableUploadResult uploadResult = oss.resumableUpload(request);

次のサンプルコードは、Android 10 以降のスコープストレージで、ファイルの URI を使用してファイルを OSS にアップロードする方法の例です。

// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。 完全なパスにバケット名を含めることはできません。
String objectName = "exampledir/exampleobject.txt";

String recordDirectory = getApplication().getFilesDir().getAbsolutePath() + "/oss_record/";

File recordDir = new File(recordDirectory);

// ブレークポイントレコードを保存するフォルダが存在することを確認します。フォルダが存在しない場合は作成します。
if (!recordDir.exists()) {
    recordDir.mkdirs();
}

// 再開可能なアップロードリクエストを作成し、ブレークポイントレコードファイルを保存するパスを指定します。パスは絶対パスである必要があります。
// "fileUri" パラメーターは、ファイルの実際の URI に設定する必要があります。
ResumableUploadRequest request = new ResumableUploadRequest(bucketName, objectName, fileUri, recordDirectory);
// OSSAsyncTask の cancel() メソッドを呼び出す際に DeleteUploadOnCancelling を false に設定すると、ブレークポイントレコードファイルの削除が防止されます。これにより、次回同じファイルをアップロードする際に、ブレークポイントからアップロードを再開できます。このパラメーターを設定しない場合のデフォルト値は true で、ブレークポイントレコードファイルは削除されます。その結果、次回同じファイルをアップロードする際は、最初からアップロードが開始されます。
request.setDeleteUploadOnCancelling(false);
// アップロードのコールバックを設定します。
request.setProgressCallback(new OSSProgressCallback<ResumableUploadRequest>() {
    @Override
    public void onProgress(ResumableUploadRequest request, long currentSize, long totalSize) {
        Log.d("resumableUpload", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});


ResumableUploadResult uploadResult = oss.resumableUpload(request);

次のサンプルコードは、チェックポイントファイルをご利用のコンピューターに保存せずに再開可能なアップロードを実行する方法の例です。

// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。 完全なパスにバケット名を含めることはできません。
String objectName = "exampledir/exampleobject.txt";
// ファイルの完全なパスを指定します。例: /storage/emulated/0/oss/examplefile.txt。
String localFilepath = "/storage/emulated/0/oss/examplefile.txt";

// 再開可能なアップロードリクエストを作成します。
ResumableUploadRequest request = new ResumableUploadRequest(bucketName, objectName, localFilepath);
// アップロードのコールバックを設定します。
request.setProgressCallback(new OSSProgressCallback<ResumableUploadRequest>() {
    @Override
    public void onProgress(ResumableUploadRequest request, long currentSize, long totalSize) {
        Log.d("resumableUpload", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});


ResumableUploadResult uploadResult = oss.resumableUpload(request);

非同期メソッド

次のサンプルコードは、`examplefile.txt` という名前のローカルファイルを `examplebucket` バケットの `exampledir` ディレクトリに非同期でアップロードする方法の例です。ローカルファイルがアップロードされると、オブジェクト名は `exampleobject.txt` になります。チェックポイントファイルはご利用のコンピューターに保存されます。

// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。 完全なパスにバケット名を含めることはできません。
String objectName = "exampledir/exampleobject.txt";
// ファイルの完全なパスを指定します。例: /storage/emulated/0/oss/examplefile.txt。
String localFilepath = "/storage/emulated/0/oss/examplefile.txt";
String recordDirectory = Environment.getExternalStorageDirectory().getAbsolutePath() + "/oss_record/";

File recordDir = new File(recordDirectory);

// ブレークポイントレコードを保存するパスが存在することを確認します。パスが存在しない場合は作成します。
if (!recordDir.exists()) {
    recordDir.mkdirs();
}

// 再開可能なアップロードリクエストを作成し、ブレークポイントレコードファイルを保存するパスを指定します。パスは絶対パスである必要があります。
ResumableUploadRequest request = new ResumableUploadRequest(bucketName, objectName, localFilepath, recordDirectory);
// OSSAsyncTask の cancel() メソッドを呼び出す際に DeleteUploadOnCancelling を false に設定すると、ブレークポイントレコードファイルの削除が防止されます。これにより、次回同じファイルをアップロードする際に、ブレークポイントからアップロードを再開できます。このパラメーターを設定しない場合のデフォルト値は true で、ブレークポイントレコードファイルは削除されます。その結果、次回同じファイルをアップロードする際は、最初からアップロードが開始されます。
request.setDeleteUploadOnCancelling(false);
// アップロードの進行状況のコールバックを設定します。
request.setProgressCallback(new OSSProgressCallback<ResumableUploadRequest>() {
    @Override
    public void onProgress(ResumableUploadRequest request, long currentSize, long totalSize) {
        Log.d("resumableUpload", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});


OSSAsyncTask resumableTask = oss.asyncResumableUpload(request, new OSSCompletedCallback<ResumableUploadRequest, ResumableUploadResult>() {
    @Override
    public void onSuccess(ResumableUploadRequest request, ResumableUploadResult result) {
        Log.d("resumableUpload", "success!");
    }

    @Override
    public void onFailure(ResumableUploadRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // 例外を処理します。
    }
});

// 再開可能なアップロードタスクが完了するのを待ちます。
resumableTask.waitUntilFinished();                

次のサンプルコードは、Android 10 以降のスコープストレージで、ファイルの URI を使用してファイルを OSS にアップロードする方法の例です。

// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。 完全なパスにバケット名を含めることはできません。
String objectName = "exampledir/exampleobject.txt";
String recordDirectory = getApplication().getFilesDir().getAbsolutePath() + "/oss_record/";

File recordDir = new File(recordDirectory);

// ブレークポイントレコードを保存するフォルダが存在することを確認します。フォルダが存在しない場合は作成します。
if (!recordDir.exists()) {
    recordDir.mkdirs();
}

// 再開可能なアップロードリクエストを作成し、ブレークポイントレコードファイルを保存するパスを指定します。パスは絶対パスである必要があります。
// "fileUri" パラメーターは、ファイルの実際の URI に設定する必要があります。
ResumableUploadRequest request = new ResumableUploadRequest(bucketName, objectName, fileUri, recordDirectory);
// OSSAsyncTask の cancel() メソッドを呼び出す際に DeleteUploadOnCancelling を false に設定すると、ブレークポイントレコードファイルの削除が防止されます。これにより、次回同じファイルをアップロードする際に、ブレークポイントからアップロードを再開できます。このパラメーターを設定しない場合のデフォルト値は true で、ブレークポイントレコードファイルは削除されます。その結果、次回同じファイルをアップロードする際は、最初からアップロードが開始されます。
request.setDeleteUploadOnCancelling(false);
// アップロードのコールバックを設定します。
request.setProgressCallback(new OSSProgressCallback<ResumableUploadRequest>() {
    @Override
    public void onProgress(ResumableUploadRequest request, long currentSize, long totalSize) {
        Log.d("resumableUpload", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});


OSSAsyncTask resumableTask = oss.asyncResumableUpload(request, new OSSCompletedCallback<ResumableUploadRequest, ResumableUploadResult>() {
    @Override
    public void onSuccess(ResumableUploadRequest request, ResumableUploadResult result) {
        Log.d("resumableUpload", "success!");
    }

    @Override
    public void onFailure(ResumableUploadRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // 例外を処理します。
    }
});

// 再開可能なアップロードタスクが完了するのを待ちます。
resumableTask.waitUntilFinished();

次のサンプルコードは、チェックポイントファイルをご利用のコンピューターに保存せずに再開可能なアップロードを実行する方法の例です。

// バケット名を指定します。例: examplebucket。
String bucketName = "examplebucket";
// オブジェクトの完全なパスを指定します。例: exampledir/exampleobject.txt。 完全なパスにバケット名を含めることはできません。
String objectName = "exampledir/exampleobject.txt";
// ファイルの完全なパスを指定します。例: /storage/emulated/0/oss/examplefile.txt。
String localFilepath = "/storage/emulated/0/oss/examplefile.txt";

// 再開可能なアップロードリクエストを作成します。
ResumableUploadRequest request = new ResumableUploadRequest(bucketName, objectName, localFilepath);

// アップロードの進行状況のコールバックを設定します。
request.setProgressCallback(new OSSProgressCallback<ResumableUploadRequest>() {
    @Override
    public void onProgress(ResumableUploadRequest request, long currentSize, long totalSize) {
        Log.d("resumableUpload", "currentSize: " + currentSize + " totalSize: " + totalSize);
    }
});
// 再開可能なアップロードメソッドを非同期で呼び出します。
OSSAsyncTask resumableTask = oss.asyncResumableUpload(request, new OSSCompletedCallback<ResumableUploadRequest, ResumableUploadResult>() {
    @Override
    public void onSuccess(ResumableUploadRequest request, ResumableUploadResult result) {
        Log.d("resumableUpload", "success!");
    }

    @Override
    public void onFailure(ResumableUploadRequest request, ClientException clientExcepion, ServiceException serviceException) {
        // 例外を処理します。
    }
});

// 再開可能なアップロードタスクが完了するのを待ちます。
resumableTask.waitUntilFinished();                     

関連ドキュメント

  • バケットのライフサイクルルールを設定する方法の詳細については、「ライフサイクルルールの設定」をご参照ください。

  • 再開可能なアップロードでアップロードコールバックを実装する方法の詳細については、「コールバック」をご参照ください。

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