You need to enable JavaScript to run this app.
导航

异常处理(C++ SDK)

最近更新时间2024.02.04 18:30:55

首次发布时间2022.04.08 10:56:29

本文介绍使用 TOS SDK 时的异常处理。

TOS 服务端错误

TOS 服务端遵循 HTTP 规范,对于请求失败的场景定义了详细的 HTTP 状态码和业务错误码。详细内容请参见 TOS 服务端状态码和错误码定义

SDK 自定义异错误

客户端错误

当客户端输入参数有误、发生错误需要取消断点续传上传等场景的会报客户端错误。例如创建桶时,如果桶名字符长度大于 63 个字符则返回错误中 isClientError 参数为 true,标识发生了客户端错误。

服务端错误

通过 TOS C++ SDK 接口向 TOS 服务端发送请求,请求响应中会包含遵循 HTTP 规范的状态码和业务错误码,用于标识当前请求的响应状态,同时 isClientError 参数的值为 false。

错误处理示例

以下代码展示了下载一个的对象,然后针对客户端返回值处理,若为服务端错误则可以打印 HTTP 请求状态码、错误信息、请求的 RequestId 和 HostId,若为客户端错误则可以打印错误消息。

#include "TosClientV2.h"
using namespace VolcengineTos;

int main(void){
    // 初始化 TOS 账号信息
    // Your Region 填写 Bucket 所在 Region
    std::string region = "Your Region";
    std::string accessKey = std::getenv("TOS_ACCESS_KEY");
    std::string secretKey = std::getenv("TOS_SECRET_KEY");
    // 填写 Bucket 名称,例如 examplebucket
    std::string bucketName = "examplebucket";
    // 填写Object完整路径,完整路径中不能包含Bucket名称,例如exampledir/exampleobject.txt。
    std::string objectName = "exampledir/exampleobject.txt";

    // 初始化网络等资源
    InitializeClient();
    // 创建交互的 client
    TosClientV2 client(region, accessKey, secretKey);

    GetObjectV2Input input(bucketName, objectName);
    auto output = client.getObject(input);
    if (!output.isSuccess()) {
        auto error = output.error();
        if(error.isClientError()){
            // 客户端错误
            std::cout << "TosClientError: {message=" << error.getMessage() << "}";
        } else {
            // 服务端错误
            std::cout << "TosServerError: {statusCode=" << error.getStatusCode() << ", "
            << "code=" << error.getCode() << ", "
            << "message=" << error.getMessage() << ", "
            << "requestID=" << error.getRequestId() << ", "
            << "hostID=" << error.getHostId() << "}";
        }
        // 释放网络等资源
        CloseClient();
        return -1;
    }

    std::cout << "GetObject success. the object etag:" << output.result().getETags()  << std::endl;
    // 释放网络等资源
    CloseClient();
    return 0;
}