更新时间:2026-09-10 GMT+08:00
分享

获取对象crc64

您可以通过以下接口获取对象crc64校验文件,并与本地计算的crc64校验文件比较从而实现crc64一致性校验:

如果对象存在CRC64值,则返回CRC64,否则不返回。

示例代码一:流式下载

以下代码展示如何在流式下载对象时获取CRC64。

import android.util.Log;

import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.GetObjectRequest;
import com.obs.services.model.ObsObject;

import java.io.InputStream;
import java.io.IOException;

public class GetObjectWithCRC64Demo {
    private static final String TAG = "GetObjectWithCRC64";

    public void getObjectWithCRC64() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
                // 您可以登录访问管理控制台获取访问密钥AK/SK
                String ak = System.getenv("ACCESS_KEY_ID");
                String sk = System.getenv("SECRET_ACCESS_KEY_ID");
                String endPoint = "https://your-endpoint";

                // 创建ObsClient实例
                ObsClient obsClient = new ObsClient(ak, sk, endPoint);

                try {
                    // 流式下载对象
                    String bucketName = "examplebucket";
                    String objectKey = "objectname";
                    GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectKey);
                    ObsObject obsObject = obsClient.getObject(getObjectRequest);
                    // 使用try-with-resources确保流在任何情况下都能被关闭
                    try (InputStream inputStream = obsObject.getObjectContent()) {
                        Log.i(TAG, "Server returned crc64 string:" + obsObject.getMetadata().getCrc64());
                        Log.i(TAG, "GetObject successfully");
                    } catch (IOException e) {
                        Log.e(TAG, "close input stream failed", e);
                    }
                } catch (ObsException e) {
                    Log.e(TAG, "GetObject failed");
                    Log.e(TAG, "HTTP Code:" + e.getResponseCode());
                    Log.e(TAG, "Error Code:" + e.getErrorCode());
                    Log.e(TAG, "Error Message:" + e.getErrorMessage());
                    Log.e(TAG, "Request ID:" + e.getErrorRequestId());
                    Log.e(TAG, "Host ID:" + e.getErrorHostId());
                } catch (Exception e) {
                    Log.e(TAG, "GetObject failed");
                    Log.e(TAG, e.getMessage());
                } finally {
                    try {
                        obsClient.close();
                    } catch (Exception e) {
                        // 忽略关闭异常
                    }
                }
            }
        }).start();
    }
}

示例代码二:范围下载

以下代码展示如何在范围下载对象时获取CRC64。

import android.util.Log;

import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.GetObjectRequest;
import com.obs.services.model.ObsObject;

import java.io.InputStream;
import java.io.IOException;

public class GetObjectRangeWithCRC64Demo {
    private static final String TAG = "GetObjectRangeWithCRC64";

    public void getObjectRangeWithCRC64() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
                // 您可以登录访问管理控制台获取访问密钥AK/SK
                String ak = System.getenv("ACCESS_KEY_ID");
                String sk = System.getenv("SECRET_ACCESS_KEY_ID");
                String endPoint = "https://your-endpoint";

                // 创建ObsClient实例
                ObsClient obsClient = new ObsClient(ak, sk, endPoint);

                try {
                    // 范围下载对象
                    String bucketName = "examplebucket";
                    String objectKey = "objectname";
                    GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, objectKey);
                    // 指定开始和结束范围
                    getObjectRequest.setRangeStart(0L);
                    getObjectRequest.setRangeEnd(1000L);
                    ObsObject obsObject = obsClient.getObject(getObjectRequest);
                    // 使用try-with-resources确保流在任何情况下都能被关闭
                    try (InputStream inputStream = obsObject.getObjectContent()) {
                        Log.i(TAG, "Server returned crc64 string:" + obsObject.getMetadata().getCrc64());
                        Log.i(TAG, "GetObject successfully");
                    } catch (IOException e) {
                        Log.e(TAG, "close input stream failed", e);
                    }
                } catch (ObsException e) {
                    Log.e(TAG, "GetObject failed");
                    Log.e(TAG, "HTTP Code:" + e.getResponseCode());
                    Log.e(TAG, "Error Code:" + e.getErrorCode());
                    Log.e(TAG, "Error Message:" + e.getErrorMessage());
                    Log.e(TAG, "Request ID:" + e.getErrorRequestId());
                    Log.e(TAG, "Host ID:" + e.getErrorHostId());
                } catch (Exception e) {
                    Log.e(TAG, "GetObject failed");
                    Log.e(TAG, e.getMessage());
                } finally {
                    try {
                        obsClient.close();
                    } catch (Exception e) {
                        // 忽略关闭异常
                    }
                }
            }
        }).start();
    }
}

示例代码三:获取对象元数据

以下代码展示如何获取对象的CRC64。

import android.util.Log;

import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.ObjectMetadata;

public class GetObjectMetadataWithCRC64Demo {
    private static final String TAG = "GetObjectMetadataCRC64";

    public void getObjectMetadataWithCRC64() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
                // 您可以登录访问管理控制台获取访问密钥AK/SK
                String ak = System.getenv("ACCESS_KEY_ID");
                String sk = System.getenv("SECRET_ACCESS_KEY_ID");
                // endpoint填写桶所在的endpoint, 此处以华北-北京四为例,其他地区请按实际情况填写。
                String endPoint = "https://your-endpoint";

                // 创建ObsClient实例
                ObsClient obsClient = new ObsClient(ak, sk, endPoint);

                try {
                    // 获取对象元数据,读取CRC64值
                    String bucketName = "examplebucket";
                    String objectKey = "objectname";
                    ObjectMetadata objectMetadata = obsClient.getObjectMetadata(bucketName, objectKey);
                    Log.i(TAG, "Server returned crc64 string:" + objectMetadata.getCrc64());
                    Log.i(TAG, "GetObjectMetadata successfully");
                } catch (ObsException e) {
                    Log.e(TAG, "GetObjectMetadata failed");
                    Log.e(TAG, "HTTP Code:" + e.getResponseCode());
                    Log.e(TAG, "Error Code:" + e.getErrorCode());
                    Log.e(TAG, "Error Message:" + e.getErrorMessage());
                    Log.e(TAG, "Request ID:" + e.getErrorRequestId());
                    Log.e(TAG, "Host ID:" + e.getErrorHostId());
                } catch (Exception e) {
                    Log.e(TAG, "GetObjectMetadata failed");
                    Log.e(TAG, e.getMessage());
                } finally {
                    try {
                        obsClient.close();
                    } catch (Exception e) {
                        // 忽略关闭异常
                    }
                }
            }
        }).start();
    }
}

示例代码四:复制对象

以下代码展示如何在使用复制对象时获取CRC64。

import android.util.Log;

import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.CopyObjectRequest;
import com.obs.services.model.CopyObjectResult;

public class CopyObjectWithCRC64Demo {
    private static final String TAG = "CopyObjectWithCRC64";

    public void copyObjectWithCRC64() {
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全;本示例以ak和sk保存在环境变量中为例,运行本示例前请先在本地环境中设置环境变量ACCESS_KEY_ID和SECRET_ACCESS_KEY_ID。
                // 您可以登录访问管理控制台获取访问密钥AK/SK
                String ak = System.getenv("ACCESS_KEY_ID");
                String sk = System.getenv("SECRET_ACCESS_KEY_ID");
                String endPoint = "https://your-endpoint";

                // 创建ObsClient实例
                ObsClient obsClient = new ObsClient(ak, sk, endPoint);

                try {
                    // 复制对象
                    String sourceBucketName = "examplebucket";
                    String destBucketName = "destexamplebucket";
                    String sourceObjectKey = "objectname";
                    String destObjectKey = "copyobjectname";
                    CopyObjectRequest copyObjectRequest = new CopyObjectRequest(
                    sourceBucketName, sourceObjectKey, destBucketName, destObjectKey);
                    CopyObjectResult copyObjectResult = obsClient.copyObject(copyObjectRequest);
                    String crc64 = copyObjectResult.getCRC64();
                    Log.i(TAG, "Server returned crc64 string:" + crc64);
                    Log.i(TAG, "CopyObject successfully");
                } catch (ObsException e) {
                    Log.e(TAG, "CopyObject failed");
                    Log.e(TAG, "HTTP Code:" + e.getResponseCode());
                    Log.e(TAG, "Error Code:" + e.getErrorCode());
                    Log.e(TAG, "Error Message:" + e.getErrorMessage());
                    Log.e(TAG, "Request ID:" + e.getErrorRequestId());
                    Log.e(TAG, "Host ID:" + e.getErrorHostId());
                } catch (Exception e) {
                    Log.e(TAG, "CopyObject failed");
                    Log.e(TAG, e.getMessage());
                } finally {
                    try {
                        obsClient.close();
                    } catch (Exception e) {
                        // 忽略关闭异常
                    }
                }
            }
        }).start();
    }
}

相关文档