异常处理
更新时间:2024-04-24
SDK 调用失败时,结果信息包含在 API 返回的 bos_status_t 结构中。
SDK 中使用每一个 API 的正确做法如下所示,为了简要,文档中范例不再给出具体异常的处理,仅给出 API 的使用范例。
bos_status_t *s = NULL;
s = bos_put_object_from_file(options, &bucket, &object, &file, &headers, &resp_headers);
if (!s && !bos_status_is_ok(s)) {
// 按需要进行异常场景的日志输出和处理
bos_warn_log("failed to put object from file", buf);
if (s->error_code) bos_warn_log("status->error_code: %s", s->error_code);
if (s->error_msg) bos_warn_log("status->error_msg: %s", s->error_msg);
if (s->req_id) bos_warn_log("status->req_id: %s", s->req_id);
}
客户端异常
客户端异常表示客户端尝试向BOS发送请求以及数据传输时遇到的异常。 例如,当发送请求时网络连接不可用时,client操作会返回非零;当上传文件时发生IO异常时,返回非零。
当 bos_status_t 结构中 code 成员值小于0时,表明发生 SDK 本地客户端错误,错误码信息参考枚举 bos_error_code_e 定义。
typedef enum {
BOSE_OK = 0,
BOSE_OUT_MEMORY = -1000,
BOSE_OVER_MEMORY = -999,
BOSE_FAILED_CONNECT = -998,
BOSE_ABORT_CALLBACK = -997,
BOSE_INTERNAL_ERROR = -996,
BOSE_REQUEST_TIMEOUT = -995,
BOSE_INVALID_ARGUMENT = -994,
BOSE_INVALID_OPERATION = -993,
BOSE_CONNECTION_FAILED = -992,
BOSE_FAILED_INITIALIZE = -991,
BOSE_NAME_LOOKUP_ERROR = -990,
BOSE_FAILED_VERIFICATION = -989,
BOSE_WRITE_BODY_ERROR = -988,
BOSE_READ_BODY_ERROR = -987,
BOSE_SERVICE_ERROR = -986,
BOSE_OPEN_FILE_ERROR = -985,
BOSE_FILE_SEEK_ERROR = -984,
BOSE_FILE_INFO_ERROR = -983,
BOSE_FILE_READ_ERROR = -982,
BOSE_FILE_WRITE_ERROR = -981,
BOSE_JSON_PARSE_ERROR = -975,
BOSE_UTF8_ENCODE_ERROR = -979,
BOSE_CRC_INCONSISTENT_ERROR = -978,
BOSE_FILE_FLUSH_ERROR = -977,
BOSE_FILE_TRUNC_ERROR = -976,
BOSE_UNKNOWN_ERROR = -100
} bos_error_code_e;
服务端异常
当 bos_status_t 结构中 code 成员值大于0时,表明发生网络侧错误。
以下是 bos_status_t 结构的描述:
bos_status_t 成员 | 描述 | 类型 |
---|---|---|
code | response 的 status 状态码, 4xx 是指请求因客户端而失败, 5xx 是服务端异常导致的失败 | Int |
error_code | 请求失败时 body 返回的 Error Code | String |
error_msg | 请求失败时 body 返回的 Error Message | String |
req_id | 请求 ID,用于标识用户唯一请求 | String |