OSS Java SDK包含两类异常,一类是客户端异常ClientException,另一类是服务器端异常OSSException,它们均继承自RuntimeException。
异常处理示例
以下代码用于展示异常处理:
try { // OSS操作,例如上传文件 ossClient.putObject(...); } catch (OSSException oe) { System.out.println("Caught an OSSException, which means your request made it to OSS, " + "but was rejected with an error response for some reason."); System.out.println("Error Message: " + oe.getErrorMessage()); System.out.println("Error Code: " + oe.getErrorCode()); System.out.println("Request ID: " + oe.getRequestId()); System.out.println("Host ID: " + oe.getHostId()); } catch (ClientException ce) { System.out.println("Caught an ClientException, which means the client encountered " + "a serious internal problem while trying to communicate with OSS, " + "such as not being able to access the network."); System.out.println("Error Message: " + ce.getMessage()); } finally { if (ossClient != null) { ossClient.shutdown(); } }
ClientException
ClientException指客户端尝试向OSS发送请求以及数据传输时遇到的异常。例如,当发送请求时网络连接不可用,则会抛出ClientException。当上传文件时发生IO异常,也会抛出ClientException。
OSSException
OSSException指服务器端异常,它来自于对服务器错误信息的解析。OSSException包含OSS返回的错误码和错误信息,便于定位问题,并做出适当的处理。
OSSException通常包含以下错误信息:
参数 | 描述 |
---|---|
Code | OSS返回的错误码。 |
Message | OSS返回的详细错误信息。 |
RequestId | 用于唯一标识该请求的UUID。当您无法解决问题时,可以提供RequestId来请求OSS开发工程师的帮助。 |
HostId | 用于标识访问的OSS集群,与请求时使用的Host一致。 |
OSS常见错误码
错误码 | 描述 | HTTP状态码 |
---|---|---|
AccessDenied | 拒绝访问 | 403 |
BucketAlreadyExists | 存储空间已经存在 | 409 |
BucketNotEmpty | 存储空间非空 | 409 |
EntityTooLarge | 实体过大 | 400 |
EntityTooSmall | 实体过小 | 400 |
FileGroupTooLarge | 文件组过大 | 400 |
FilePartNotExist | 文件分片不存在 | 400 |
FilePartStale | 文件分片过时 | 400 |
InvalidArgument | 参数格式错误 | 400 |
InvalidAccessKeyId | AccessKeyId不存在 | 403 |
InvalidBucketName | 无效的存储空间名称 | 400 |
InvalidDigest | 无效的摘要 | 400 |
InvalidObjectName | 无效的文件名称 | 400 |
InvalidPart | 无效的分片 | 400 |
InvalidPartOrder | 无效的分片顺序 | 400 |
InvalidTargetBucketForLogging | Logging操作中有无效的目标存储空间 | 400 |
InternalError | OSS内部错误 | 500 |
MalformedXML | XML格式非法 | 400 |
MethodNotAllowed | 不支持的方法 | 405 |
MissingArgument | 缺少参数 | 411 |
MissingContentLength | 缺少内容长度 | 411 |
NoSuchBucket | 存储空间不存在 | 404 |
NoSuchKey | 文件不存在 | 404 |
NoSuchUpload | 分片上传ID不存在 | 404 |
NotImplemented | 无法处理的方法 | 501 |
PreconditionFailed | 预处理错误 | 412 |
RequestTimeTooSkewed | 客户端本地时间和OSS服务器时间相差超过15分钟 | 403 |
RequestTimeout | 请求超时 | 400 |
SignatureDoesNotMatch | 签名错误 | 403 |
InvalidEncryptionAlgorithmError | 指定的熵编码加密算法错误 | 400 |