SDK异常处理

最近更新时间:2021-04-28 10:59:49

查看PDF

注意:下面的说明描述以JAVA SDK的使用为例 ,其它SDK可参考此文档。

常见异常说明

错误码 描述 状态码 如何处理
BucketAlreadyExists 桶已存在 409 桶名有冲突,需要重新命名
BucketNotEmpty 桶不为空 409 先删除桶内文件,再执行删除
ClientIllegalArgument 桶名不合法
NoSuchBucket Bucket不存在 404 Bucket不存在,检查是否拼写错误、未创建Bucket
NotFound 文件不存在 404 检查文件名是否拼写错误、未上传、已删除
AccessDenied 没有权限,拒绝访问 403 1、检查是否使用匿名的方式访问私密文件;2、如果用子账号或者其他账号访问资源,检查是否给子账号或者其他账号进行了正确的授权;3、检查是否使用自定义域名访问,但是在KS3未绑定域名
RequestTimeTooSkewed 发起请求的时间和服务器时间超出15分钟 403 检查机器时钟
InvalidAccessKeyId AK非法 403 检查AK是否拼写错误
SignatureDoesNotMatch 签名不匹配 403 1、检查SK是否正确;2、检查签名算法
InvalidKey 文件名不合法 400 检查文件名是否不合法
InvalidDigest md5错误 400 检查上传的md5值是否错误
InvalidPartNum 上传分块,块号错误 400 块号范围[1,10000]
InvalidPartOrder 分块上传完成,块号顺序错误 400 块号不连续,有缺失块
EntityTooLarge 单次上传太大,超过5G 400 单次上传太大,超过5G
UnknownHost 域名未解析 1、检查域名是否拼写有误;2、检查公网网络是否异常
CallRemoteFail 网络异常 使用重试机制,见下面的说明

网络异常时的重试机制

注意:对网络异常可以进行有限次数的重试,对业务异常(KS3返回的)不建议进行重试,需要客户按照返回的异常错误码,查找原因。

以JAVA SDK的putObject为例:

String bucketName = "test-bucket";
String objectKey = "test-key";
File file = new File("d:\\test");
try{
	client.putObject(bucketName, objectKey, file);
}catch(CallRemoteFailException e){
	if(e.getMessage().indexOf("ConnectTimeoutException")>-1||e.getMessage().indexOf("SocketTimeoutException")>-1){
		System.out.println("newwork error,need retry:"+bucketName+" objectKey:"+objectKey);
		//进行重试,对于网络异常,建议进行有限次数的重试
		//client.putObject(bucketName, objectKey, file);
}
}catch(Ks3ServiceException e){
	System.out.println(e.getStatueCode());//http status
	System.out.println(e.getErrorCode());//error code
	System.out.println(e.getErrorMessage());//error message
	System.out.println(e.getRequestId());//requestid,请求唯一标识,可以将此标识提供后售后人员,协助排查
}finally{
	//release resource
}

文档内容是否对您有帮助?

根本没帮助
文档较差
文档一般
文档不错
文档很好

在文档使用中是否遇到以下问题

  • 内容不全,不深入
  • 内容更新不及时
  • 描述不清晰,比较混乱
  • 系统或功能太复杂,缺乏足够的引导
  • 内容冗长

更多建议

0/200

评价建议不能为空

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

问题反馈