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

Object Storage Service:データ検証

最終更新日:Mar 11, 2024

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

使用上の注意

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

背景情報

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

CRC-64

データストリームの読み取りに対して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 (リクエスト);
    =result.getObjectContent() 内のInputStream;
    ByteArrayOutputStream出力=新しいByteArrayOutputStream();
    byte[] buffer = new byte[2048];
    int len;
    while ((len = in.read(buffer)) > -1) {
        output.write (バッファ、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-encoded MD5値を計算します。
    文字列fileMD5 = BinaryUtil.ca lculateBase64Md5(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 (メタデータ);

OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
    @オーバーライド
    public void onSuccess(PutObjectRequestリクエスト, PutObjectResult結果) {
        Log.d("PutObject", "UploadSuccess");
        Log.d("ETag", result.getETag());
        Log.d("RequestId", result.getRequestId());
    }

    @オーバーライド
    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インスタンスを初期化する方法の詳細については、「初期化」をご参照ください。