对象存储 OSS数据完整性校验
详细解答可以参考官方帮助文档因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。
MD5校验
需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的一致性。
// 构造上传请求PutObjectRequest put = new PutObjectRequest('', '', '');ObjectMetadata metadata = new ObjectMetadata();metadata.setContentType('application/octet-stream');try { // 设置Md5以便校验 metadata.setContentMD5(BinaryUtil.calculateBase64Md5('')); // 如果是从文件上传 // metadata.setContentMD5(BinaryUtil.calculateBase64Md5(byte[])); // 如果是上传二进制数据} catch (IOException e) { e.printStackTrace();}put.setMetadata(metadata);OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallbackPutObjectRequest, PutObjectResult>() { ...});
CRC校验
与MD5相比,CRC64可以边上传边计算CRC值。
// 构造上传请求PutObjectRequest put = new PutObjectRequest('', '', '');// 开启crc效验后。如果在传输中数据不一致,会直接抛出ClientException异常。提示InconsistentException: inconsistent objectput.setCRC64(OSSRequest.CRC64Config.YES);OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallbackPutObjectRequest, PutObjectResult>() { @Override public void onSuccess(PutObjectRequest request, PutObjectResult result) { //..... } @Override public void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) { //..... if (clientExcepion != null) { // client side exception, such as network exception // 检查是否有InconsistentException: inconsistent object信息 clientExcepion.getMessage(); } }});
赞0
踩1