开发者社区> 问答> 正文

对象存储 OSS数据完整性校验

已解决

展开
收起
2018-05-14 02:19:50 2375 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    详细解答可以参考官方帮助文档

    因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。

    MD5校验

    需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的一致性。

    1. // 构造上传请求
    2. PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectKey>", "<uploadFilePath>");
    3. ObjectMetadata metadata = new ObjectMetadata();
    4. metadata.setContentType("application/octet-stream");
    5. try {
    6. // 设置Md5以便校验
    7. metadata.setContentMD5(BinaryUtil.calculateBase64Md5("<uploadFilePath>")); // 如果是从文件上传
    8. // metadata.setContentMD5(BinaryUtil.calculateBase64Md5(byte[])); // 如果是上传二进制数据
    9. } catch (IOException e) {
    10. e.printStackTrace();
    11. }
    12. put.setMetadata(metadata);
    13. OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
    14. ...
    15. });

    CRC校验

    与MD5相比,CRC64可以边上传边计算CRC值。

    1. // 构造上传请求
    2. PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectKey>", "<uploadFilePath>");
    3. // 开启crc效验后。如果在传输中数据不一致,会直接抛出ClientException异常。提示InconsistentException: inconsistent object
    4. put.setCRC64(OSSRequest.CRC64Config.YES);
    5. OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {
    6. @Override
    7. public void onSuccess(PutObjectRequest request, PutObjectResult result) {
    8. //.....
    9. }
    10. @Override
    11. public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {
    12. //.....
    13. if (clientExcepion != null) {
    14. // client side exception, such as network exception
    15. // 检查是否有InconsistentException: inconsistent object信息
    16. clientExcepion.getMessage();
    17. }
    18. }
    19. });
    2018-05-19 21:11:40
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
OSS运维进阶实战手册 立即下载
《OSS运维基础实战手册》 立即下载
OSS运维基础实战手册 立即下载