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

下载时使用crc64校验文件一致性

您可以通过断点续传下载接口获取对象的CRC64校验值,并与本地计算的CRC64校验值比较从而实现一致性校验:

示例代码:断点续传下载

以下代码展示如何在断点续传下载时使用CRC64校验一致性。

import android.util.Log;

import com.obs.services.ObsClient;
import com.obs.services.exception.ObsException;
import com.obs.services.model.DownloadFileRequest;
import com.obs.services.model.DownloadFileResult;

public class DownloadFileWithCRC64Demo {
    private static final String TAG = "DownloadFileWithCRC64";

    public void downloadFileWithCRC64() {
        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 {
                    DownloadFileRequest request = new DownloadFileRequest("examplebucket", "objectname");
                    // 设置下载到本地的文件路径
                    request.setDownloadFile("/sdcard/Download/localfile");
                    // 设置分段下载时的最大并发数
                    request.setTaskNum(5);
                    // 设置分段大小为10MB
                    request.setPartSize(10 * 1024 * 1024);
                    // 开启断点续传模式
                    request.setEnableCheckpoint(true);
                    // 开启校验文件CRC64
                    request.setNeedCalculateCRC64(true);
                    // 进行断点续传下载
                    DownloadFileResult result = obsClient.downloadFile(request);
                    Log.i(TAG, "Server returned crc64 string:" + result.getObjectMetadata().getCrc64());
                    Log.i(TAG, "DownloadFile successfully");
                } catch (ObsException e) {
                    Log.e(TAG, "DownloadFile 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, "DownloadFile failed");
                    Log.e(TAG, e.getMessage());
                } finally {
                    try {
                        obsClient.close();
                    } catch (Exception e) {
                        // 忽略关闭异常
                    }
                }
            }
        }).start();
    }
}

相关文档