版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
详细解答可以参考官方帮助文档
因为移动端网络环境的复杂性,OSS SDK提供了基于MD5和CRC64的端到端的数据完整性验证功能。
MD5校验
需要在上传文件时提供文件的Content-MD5值,OSS服务器会帮助用户进行MD5校验,只有在OSS服务器计算接收到的文件得到的MD5值和上传提供的MD5一致时才可以上传成功,从而保证上传数据的一致性。
// 构造上传请求PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectKey>", "<uploadFilePath>");ObjectMetadata metadata = new ObjectMetadata();metadata.setContentType("application/octet-stream");try {// 设置Md5以便校验metadata.setContentMD5(BinaryUtil.calculateBase64Md5("<uploadFilePath>")); // 如果是从文件上传// metadata.setContentMD5(BinaryUtil.calculateBase64Md5(byte[])); // 如果是上传二进制数据} catch (IOException e) {e.printStackTrace();}put.setMetadata(metadata);OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {...});
CRC校验
与MD5相比,CRC64可以边上传边计算CRC值。
// 构造上传请求PutObjectRequest put = new PutObjectRequest("<bucketName>", "<objectKey>", "<uploadFilePath>");// 开启crc效验后。如果在传输中数据不一致,会直接抛出ClientException异常。提示InconsistentException: inconsistent objectput.setCRC64(OSSRequest.CRC64Config.YES);OSSAsyncTask task = oss.asyncPutObject(put, new OSSCompletedCallback<PutObjectRequest, PutObjectResult>() {@Overridepublic void onSuccess(PutObjectRequest request, PutObjectResult result) {//.....}@Overridepublic void onFailure(PutObjectRequest request, ClientException clientExcepion, ServiceException serviceException) {//.....if (clientExcepion != null) {// client side exception, such as network exception// 检查是否有InconsistentException: inconsistent object信息clientExcepion.getMessage();}}});