全部文档
当前文档

暂无内容

如果没有找到您期望的内容,请尝试其他搜索词

文档中心

数据完整性校验

最近更新时间:2026-06-03 21:32:12

自动校验上传文件的 CRC64

SDK 支持在上传文件时通过 CRC64 校验确保数据的完整性,在初始化 Ks3Client 时开启即可(默认开启),示例代码如下:

public Ks3Client initKs3Client() {
        String endpoint = "ks3-cn-beijing.ksyuncs.com";
        String accessKeyId = "yourAccessKey";
        String accessKeySecret = "yourSecretKey";
        Ks3ClientConfig config = new Ks3ClientConfig();
        config.setEndpoint(endpoint);
        // 设置是否进行 CRC64 校验
        config.setCrcCheckEnabled(true);

        return new Ks3Client(accessKeyId, accessKeySecret, config);
    }

简单上传时校验 CRC64

以下代码用于简单上传时校验数据的 CRC64:

String filePath = "/tmp/test-file";

// 初始化 ks3 client,参见“初始化”文档
Ks3Client client = initKs3Client();

// 使用 Crc64CheckedInputStream 作为输入流,流读取过程中计算 CRC64,读取完成就能得到最终的 CRC64 值
try (Crc64CheckedInputStream crc64CheckedInputStream = new Crc64CheckedInputStream(Files.newInputStream(new File(filePath).toPath()))) {
    PutObjectResult putObjectResult = client.putObject("bucketName", "objectKey", crc64CheckedInputStream);
    // 校验 CRC64    
    String serverCrc64 = putObjectResult.getCrc64Ecma();
    String clientCrc64 = crc64CheckedInputStream.getCrc64Ecma();
    if (StringUtils.isNotBlank(serverCrc64) && StringUtils.isNotBlank(clientCrc64) && !Objects.equals(serverCrc64, clientCrc64)) {
        System.out.println("CRC64 not matched, please delete the object on ks3 and upload again");
    }
} catch (IOException e) {
    log.error("Put object Error", e);
}

分块上传时校验 CRC64

SDK 支持在上传时自动校验 CRC64,若用户需自行校验,可参考以下代码。

String bucketName = "my-bucket";
String objectKey = "test-object";
// 初始化 ks3 client,参见“初始化”文档
Ks3Client client = initKs3Client();

// 初始化分块上传
String uploadId = client.initiateMultipartUpload(bucketName, objectKey).getUploadId();

List<PartETag> partETagList = new ArrayList<>();

// 上传文件块,这里仅示例上传 1 块
byte[] bytes = "this is a test file\n".getBytes(StandardCharsets.UTF_8);
// 使用 Crc64CheckedInputStream 作为输入流,流读取过程中计算 CRC64,读取完成就能得到最终的 CRC64 值
try (Crc64CheckedInputStream crc64CheckedInputStream = new Crc64CheckedInputStream(new ByteArrayInputStream(bytes));) {
    UploadPartRequest uploadPartRequest = new UploadPartRequest(bucketName, objectKey, uploadId, 1, crc64CheckedInputStream, bytes.length);
    PartETag partETag = client.uploadPart(uploadPartRequest);
    // 校验 CRC64
    String serverCrc64 = partETag.getCrc64Ecma();
    String clientCrc64 = crc64CheckedInputStream.getCrc64Ecma();
    if (StringUtils.isNotBlank(serverCrc64) && StringUtils.isNotBlank(clientCrc64) && !Objects.equals(serverCrc64, clientCrc64)) {
        throw new RuntimeException("CRC64 not matched, please upload this part again");
    } else {
        partETagList.add(partETag);
    }
} catch (IOException e) {
    log.error("Upload part Error", e);
}

// 完成分块上传
client.completeMultipartUpload(bucketName, objectKey, uploadId, partETagList);

下载时校验 CRC64

// 初始化 ks3 client,参见“初始化”文档
Ks3Client client = initKs3Client();
String downloadFilePath = "/data/my-file";
// 下载文件
GetObjectResult objectResult = client.getObject("bucketName", "objectKey");
// 使用 Crc64CheckedInputStream 作为输入流,流读取过程中计算 CRC64,读取完成就能得到最终的 CRC64 值
try (BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(new FileOutputStream(downloadFilePath));
     Crc64CheckedInputStream inputStream = new Crc64CheckedInputStream(objectResult.getObject().getObjectContent())) {
    byte[] buffer = new byte[1024 * 1024];
    while (true) {
        int bytesRead = inputStream.read(buffer);
        if (bytesRead == -1) {
            break;
        }
        bufferedOutputStream.write(buffer, 0, bytesRead);
    }
    // 校验 CRC64
    String serverCrc64 = objectResult.getObject().getCrc64Ecma();
    String clientCrc64 = inputStream.getCrc64Ecma();
    if (StringUtils.isNotBlank(serverCrc64) && StringUtils.isNotBlank(clientCrc64) && !Objects.equals(serverCrc64, clientCrc64)) {
        System.out.println("CRC64 not matched, please delete the file and download again");
    }
} catch (IOException e) {
    log.error("Get object Error", e);
}

获取对象的 CRC64

// 初始化 ks3 client,参见“初始化”文档
Ks3Client client = initKs3Client();
HeadObjectResult headObjectResult = client.headObject("bucketName", "objectKey");
String crc64Ecma = headObjectResult.getObjectMetadata().getCrc64Ecma();
System.out.println("Object CRC64: " + crc64Ecma);
文档导读
纯净模式常规模式

纯净模式

点击可全屏预览文档内容
文档反馈