Release Notes
Announcements
Function Name | Description | Example code |
Generate a Presigned URL | Cloud Object Storage (COS) supports using pre-signed URLs for object uploads and downloads. The principle involves embedding the signature into the URL to generate a signed link. |
qcloud_cos::CosAPI InitCosAPI() {uint64_t appid = 12500000000;std::string region = "ap-guangzhou";// Region of the bucket, see https://www.tencentcloud.com/document/product/436/62?from_cn_redirect=1std::string secret_id = "************************************"; // User's SecretId. It is recommended to use sub-account keys, with authorization following the least privilege principle to mitigate usage risks. For information on how to obtain sub-account keys, see https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1std::string secret_key = "************************************"; // User's SecretKey. It is recommended to use sub-account keys, with authorization following the least privilege principle to mitigate usage risks. For information on how to obtain sub-account keys, see https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1qcloud_cos::CosConfig config(appid, secret_id, secret_key, region);qcloud_cos::CosAPI cos_tmp(config);return cos_tmp;}
qcloud_cos::CosAPI InitCosAPI() {// You need to have obtained the temporary key results: tmp_secret_id, tmp_secret_key,// For generating temporary keys, see https://www.tencentcloud.com/document/product/436/14048?from_cn_redirect=1#cos-sts-sdkuint64_t appid = 12500000000;std::string region = "ap-guangzhou";std::string tmp_secret_id = "************************************";std::string tmp_secret_key = "************************************";std::string tmp_token = "token";qcloud_cos::CosConfig config(appid, tmp_secret_id, tmp_secret_key, region);config.SetTmpToken(tmp_token);qcloud_cos::CosAPI cos_tmp(config);return cos_tmp;}
std::string CosAPI::GeneratePresignedUrl(const GeneratePresignedUrlReq& req)
void GeneratePresignedUrlDemo(qcloud_cos::CosAPI& cos) {std::string object_name = "test.txt";qcloud_cos::GeneratePresignedUrlReq req(bucket_name, object_name, qcloud_cos::HTTP_GET); // The request method can be set.// The following code block is optional. By default, the signature takes effect starting from the local current time, with a default validity period of 60s.{req.SetHttps(); // whether to use httpsuint64_t start_time_in_s = time(NULL);req.SetStartTimeInSec(start_time_in_s); // Sets the start time when the signature takes effectreq.SetExpiredTimeInSec(60); // Sets the validity period of the signature}std::string presigned_url = cos.GeneratePresignedUrl(req);std::cout << "===================GeneratePresignedUrl=====================" << std::endl;std::cout << "Presigend Url=[" << presigned_url << "]" << std::endl;std::cout << "============================================================" << std::endl;}
Parameter Name | Description | Parameter Type |
bucket_name | The bucket name follows the format BucketName-APPID. For details, see Naming Conventions | string |
object_name | An object key is a unique identifier for an object in a bucket. For example, in the object access domain name examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/doc/picture.jpg The object key is doc/picture.jpg. For details, see Object Key | string |
method | HTTP methods, optional: HTTP_GET, HTTP_POST, HTTP_PUT, HTTP_DELETE, HTTP_HEAD | string |
SetHTTPS | Set to enable HTTPS; if not set, defaults to HTTP. | None |
SetStartTimeInSec | Set the start time when the signature takes effect. | uint64_t |
SetExpiredTimeInSec | Set the validity period of the signature. | uint64_t |
SetSignHeaderHost | Whether to include the Host header (recommended), defaults to true | bool |
// Include the following header files#include "cos_defines.h"#include "Poco/Net/Context.h"#include "Poco/Net/HTTPClientSession.h"#include "Poco/Net/HTTPRequest.h"#include "Poco/Net/HTTPResponse.h"#include "Poco/Net/HTTPSClientSession.h"#include "Poco/Net/NetException.h"#include "Poco/StreamCopier.h"#include "Poco/URI.h"void GeneratePresignedUrlAndPutObjectDemo(qcloud_cos::CosAPI& cos) {std::string object_name = "test.txt";qcloud_cos::GeneratePresignedUrlReq req(bucket_name, object_name, qcloud_cos::HTTP_PUT); // The request method can be set.// The following code block is optional to set. By default, the signature takes effect starting from the local current time, with a default validity period of 60s.{req.SetUseHttps(false); // whether to use httpsuint64_t start_time_in_s = time(NULL);req.SetStartTimeInSec(start_time_in_s); // Sets the start time when the signature takes effectreq.SetExpiredTimeInSec(60); // Sets the validity period of the signature}std::string url_str = cos.GeneratePresignedUrl(req);std::cout << "===================GeneratePresignedUrl=====================" << std::endl;std::cout << "Presigend Url=[" << url_str << "]" << std::endl;std::cout << "============================================================" << std::endl;Poco::Net::HTTPResponse res;int retryIndex = 0;while (true) {try {std::cout << "send request to [" << url_str.c_str() << "]" << std::endl;Poco::URI url(url_str);std::string path = url.getPathAndQuery();std::unique_ptr<Poco::Net::HTTPClientSession> session;session.reset(new Poco::Net::HTTPClientSession(url.getHost(), url.getPort()));Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_PUT, path, Poco::Net::HTTPMessage::HTTP_1_1);std::istringstream is("put object with PresignedUrl");std::streampos pos = is.tellg();is.seekg(0, std::ios::end);req.setContentLength(is.tellg());is.seekg(pos);std::ostringstream debug_os;req.write(debug_os);std::cout << "request=[" << debug_os.str().c_str() << "]" << std::endl;std::ostream& os = session->sendRequest(req);std::streamsize copy_size = HandleStreamCopier::handleCopyStream(nullptr, is, os);Poco::Net::StreamSocket& ss = session->socket();std::istream& recv_stream = session->receiveResponse(res);int response_code = res.getStatus();// Retry on 5xx errors up to 3 timesif (response_code / 100 != 5 || retryIndex >= 3) {std::cout << "Send request over, status=" << res.getStatus() << ", reason=" << res.getReason().c_str() << std::endl;break;}std::cout << "will retry, retryIndex: " << retryIndex << std::endl;retryIndex++;} catch (const std::exception& ex) {SDK_LOG_ERR("Exception:%s, errno=%d", std::string(ex.what()).c_str(), errno);break;}}}
Esta página foi útil?
Você também pode entrar em contato com a Equipe de vendas ou Enviar um tíquete em caso de ajuda.
comentários