异常处理
更新时间:2024-04-24
SDK 调用失败时,结果信息包含在 API 返回的 bos_status_t 结构中。
SDK 中使用每一个 API 的正确做法如下所示,为了简要,文档中范例不再给出具体异常的处理,仅给出 API 的使用范例。
Plain Text
1bos_status_t *s = NULL;
2s = bos_put_object_from_file(options, &bucket, &object, &file, &headers, &resp_headers);
3if (!s && !bos_status_is_ok(s)) {
4 // 按需要进行异常场景的日志输出和处理
5 bos_warn_log("failed to put object from file", buf);
6 if (s->error_code) bos_warn_log("status->error_code: %s", s->error_code);
7 if (s->error_msg) bos_warn_log("status->error_msg: %s", s->error_msg);
8 if (s->req_id) bos_warn_log("status->req_id: %s", s->req_id);
9}
客户端异常
客户端异常表示客户端尝试向BOS发送请求以及数据传输时遇到的异常。 例如,当发送请求时网络连接不可用时,client操作会返回非零;当上传文件时发生IO异常时,返回非零。
当 bos_status_t 结构中 code 成员值小于0时,表明发生 SDK 本地客户端错误,错误码信息参考枚举 bos_error_code_e 定义。
Plain Text
1typedef enum {
2 BOSE_OK = 0,
3 BOSE_OUT_MEMORY = -1000,
4 BOSE_OVER_MEMORY = -999,
5 BOSE_FAILED_CONNECT = -998,
6 BOSE_ABORT_CALLBACK = -997,
7 BOSE_INTERNAL_ERROR = -996,
8 BOSE_REQUEST_TIMEOUT = -995,
9 BOSE_INVALID_ARGUMENT = -994,
10 BOSE_INVALID_OPERATION = -993,
11 BOSE_CONNECTION_FAILED = -992,
12 BOSE_FAILED_INITIALIZE = -991,
13 BOSE_NAME_LOOKUP_ERROR = -990,
14 BOSE_FAILED_VERIFICATION = -989,
15 BOSE_WRITE_BODY_ERROR = -988,
16 BOSE_READ_BODY_ERROR = -987,
17 BOSE_SERVICE_ERROR = -986,
18 BOSE_OPEN_FILE_ERROR = -985,
19 BOSE_FILE_SEEK_ERROR = -984,
20 BOSE_FILE_INFO_ERROR = -983,
21 BOSE_FILE_READ_ERROR = -982,
22 BOSE_FILE_WRITE_ERROR = -981,
23 BOSE_JSON_PARSE_ERROR = -975,
24 BOSE_UTF8_ENCODE_ERROR = -979,
25 BOSE_CRC_INCONSISTENT_ERROR = -978,
26 BOSE_FILE_FLUSH_ERROR = -977,
27 BOSE_FILE_TRUNC_ERROR = -976,
28 BOSE_UNKNOWN_ERROR = -100
29} 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 |