SDK异常处理

最近更新时间:2019-01-14 10:10:59

注意:下面的说明描述以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
}

金山云,开启您的云计算之旅

注册有礼