You need to enable JavaScript to run this app.
导航
普通预签名(C++ SDK)
最近更新时间:2024.02.04 18:31:03首次发布时间:2023.01.29 15:35:45

TosClient 在向服务端发起请求时,默认会对请求 header 里包含签名。SDK 也支持构造带签名的 URL,您可直接用该 URL 发起 HTTP 请求,也可以将该 URL 共享给第三方实现访问授权。本文以使用预签名的 URL 上传对象和下载对象为例,如果您有其他需求,您可以参考本文设置。

使用预签名的 URL 上传对象

生成用于上传的预签名 URL 示例。

#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);
    
    // 设置预签名 URL 有效时间,单位:秒,
    int64_t expires = 86400;
    // 生成预签名 URL
    PreSignedURLInput input(HttpMethodType::Put,bucketName,objectName,expires);
    // 设置自定义endpoint
    // input.setAlternativeEndpoint("Your Alternative Endpoint");
    input.set
    auto output = client.preSignedURL(input);
    if(!output.isSuccess()){
        // 异常处理
    std::cout << "GeneratePreSignedUrl failed." << output.error().String() << std::endl;
        // 释放网络等资源
    CloseClient();
        return -1;
    }

    std::cout << "GeneratePreSignedUrl Success, Gen Url:"<< output.result().getSignUrl() << std::endl;
    // 释放网络等资源
    CloseClient();
    return 0;
}
// 生成的 url 示例
// http://examplebucket.{endpoint/host}/exampledir/exampleobject.txt?X-Tos-Algorithm=TOS4-HMAC-SHA256&X-Tos-Credential={xxx}/{date}/{region}/tos/request&X-Tos-Date=20220922T103306Z&X-Tos-Expires=86400&X-Tos-Signature={yyy}&X-Tos-SignedHeaders=host

使用预签名的 URL 下载对象

生成用于下载的预签名 URL 示例。

#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);
    
    // 设置预签名 URL 有效时间,单位:秒,
    int64_t expires = 86400;
    // 生成预签名 URL
    PreSignedURLInput input(HttpMethodType::Get,bucketName,objectName,expires);
    auto output = client.preSignedURL(input);
    if(!output.isSuccess()){
        // 异常处理
    std::cout << "GeneratePreSignedUrl failed." << output.error().String() << std::endl;
        // 释放网络等资源
    CloseClient();
        return -1;
    }

    std::cout << "GeneratePreSignedUrl Success, Gen Url:"<< output.result().getSignUrl() << std::endl;
    // 释放网络等资源
    CloseClient();
    return 0;
}
// 生成的 url 示例
// http://examplebucket.{endpoint/host}/exampledir/exampleobject.txt?X-Tos-Algorithm=TOS4-HMAC-SHA256&X-Tos-Credential={xxx}/{date}/{region}/tos/request&X-Tos-Date=20220922T103306Z&X-Tos-Expires=86400&X-Tos-Signature={yyy}&X-Tos-SignedHeaders=host

相关文档

关于 URL 包含签名的详细信息,请参见 URL 中包含签名