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

Object Storage Service:データ検証 (Android SDK)

最終更新日:Nov 30, 2025

Object Storage Service (OSS) SDK for Android には、オブジェクトのアップロード、ダウンロード、コピー時にデータ整合性を検証し、データセキュリティを確保するためのメソッドが用意されています。

注意事項

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

背景情報

モバイルネットワークは環境が複雑なため、クライアントとサーバー間でデータを転送する際にエラーが発生することがあります。 OSS SDK for Android は、データ整合性を確保するために CRC-64 および MD5 検証メソッドを提供します。

巡回冗長検査 (CRC)

データストリームの読み取りで CRC-64 検証を有効にすると、データストリームの読み取り完了後に、OSS が自動的にデータ整合性を検証します。

次のサンプルコードに、CRC-64 を有効にする方法を示します。

説明

この例では、同期操作 getObject が使用されます。 同期操作は子スレッドで実行する必要があります。

// バケット名 (例: examplebucket) とオブジェクトの完全なパス (例: exampledir/exampleobject.txt) を指定します。
// オブジェクトの完全なパスにバケット名を含めないでください。
String bucketName = "examplebucket";
String objectKey = "exampledir/exampleobject.txt";
GetObjectRequest request = new GetObjectRequest(bucketName, objectKey);
// CRC-64 検証を有効にします。
request.setCRC64(OSSRequest.CRC64Config.YES);
try{
    GetObjectResult result = oss.getObject(request);
    InputStream in = result.getObjectContent();
    ByteArrayOutputStream output = new ByteArrayOutputStream();
    byte[] buffer = new byte[2048];
    int len;
    while ((len = in.read(buffer)) > -1) {
        output.write(buffer, 0, len);
    }
    output.flush();
    in.close();
} catch (ServiceException e) {
    Log.e("ErrorCode", e.getErrorCode());
    Log.e("RequestId", e.getRequestId());
    Log.e("HostId", e.getHostId());
    Log.e("RawMessage", e.getRawMessage());
} catch (ClientException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

MD5 検証

マルチパートアップロードでアップロードしたオブジェクトがローカルファイルと同じであるかを確認するには、アップロードリクエストで Content-MD5 値を指定してパートをアップロードします。 OSS は MD5 値の一貫性をチェックして、データ整合性を検証します。 OSS サーバーが受信したオブジェクトの MD5 ハッシュが Content-MD5 値と同じ場合にのみ、アップロードは成功します。 この方法により、アップロードされたオブジェクトの一貫性が保証されます。

次のサンプルコードに、MD5 検証を有効にする方法を示します。

// バケット名 (例: examplebucket)、オブジェクトの完全なパス (例: exampledir/exampleobject.txt)、およびローカルファイルの完全なパス (例: /storage/emulated/0/oss/examplefile.txt) を指定します。
// オブジェクトの完全なパスにバケット名を含めないでください。
String bucketName = "examplebucket";
String objectKey = "exampledir/exampleobject.txt";
String filePath = "/storage/emulated/0/oss/examplefile.txt";
// アップロードリクエストを構築します。
ObjectMetadata metadata = new ObjectMetadata();
try {
    // Base64 でエンコードされた MD5 ハッシュを計算します。
    String fileMD5 = BinaryUtil.calculateBase64Md5(filePath);
    Log.i("oss", "file md5: " + fileMD5);
    metadata.setContentMD5(fileMD5);
} catch (IOException e) {
    Log.e("oss", "Calculate file md5 error: " + e.getMessage());
}
PutObjectRequest put = new PutObjectRequest(bucketName, objectKey, filePath);
put.setMetadata(metadata);

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());
        }
    }
});

関連ドキュメント

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