有奖捉虫:行业应用 & 管理与支持文档专题 HOT

简介

本文档提供关于生成对象预签名链接的示例代码。
关于使用预签名 URL 上传的说明请参见 预签名授权上传, 使用预签名 URL 下载的说明请参见 预签名授权下载
说明
建议用户使用临时密钥生成预签名,通过临时授权的方式进一步提高预签名上传、下载等请求的安全性。申请临时密钥时,请遵循 最小权限指引原则,防止泄露目标存储桶或对象之外的资源。
如果您一定要使用永久密钥来生成预签名,建议永久密钥的权限范围仅限于上传或下载操作,以规避风险。

SDK API 参考

SDK 所有接口的具体参数与方法说明,请参考 SDK API

生成对象预签名链接

示例代码一:生成预签名上传链接

Objective-C
1.生成用于上传的签名URL
QCloudGetPresignedURLRequest* getPresignedURLRequest = [[QCloudGetPresignedURLRequest alloc] init];
?
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket
getPresignedURLRequest.bucket = @"examplebucket-1250000000";
?
// 使用预签名 URL 请求的 HTTP 方法。有效值(大小写敏感)为:@"GET"、@"PUT"、@"POST"、@"DELETE"
getPresignedURLRequest.HTTPMethod = @"PUT";
?
// 获取预签名函数,默认签入Header Host;您也可以选择不签入Header Host,但可能导致请求失败或安全漏洞
getPresignedURLRequest.signHost = YES;
?
// http 请求参数,传入的请求参数需与实际请求相同,能够防止用户篡改此HTTP请求的参数
getPresignedURLRequest.requestParameters = @{@"param1":@"value1",@"param1":@"value1"};
?
// http 请求头部,传入的请求头部需包含在实际请求中,能够防止用户篡改签入此处的HTTP请求头部
getPresignedURLRequest.requestHeaders = @{@"param1":@"value1",@"param1":@"value1"};
?
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"
getPresignedURLRequest.object = @"exampleobject";
?
[getPresignedURLRequest setFinishBlock:^(QCloudGetPresignedURLResult * _Nonnull result,
NSError * _Nonnull error) {
// 预签名 URL
NSString*?presignedURL?=?result.presienedURL;
}];
?
[[QCloudCOSXMLService defaultCOSXML] getPresignedURL:getPresignedURLRequest];
2.通过签名URL上传文件。
// 预签名 URL
NSString* presignedURL = result.presienedURL;
// 使用预签名链接进行上传文件
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:result.presienedURL]];
// 指定HTTPMethod 为PUT
request.HTTPMethod = @"PUT";
// fromData 为需要上传的文件
[[[NSURLSession sharedSession]
uploadTaskWithRequest:request fromData:[@"testtest" dataUsingEncoding:NSUTF8StringEncoding] completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// response中查看上传结果
}]resume];
说明
更多完整示例,请前往 GitHub 查看。
Swift
1.生成用于上传的签名URL
let getPresign = QCloudGetPresignedURLRequest.init();
?
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket
getPresign.bucket = "examplebucket-1250000000" ;
?
// 使用预签名 URL 请求的 HTTP 方法。有效值(大小写敏感)为:
// @"GET"、@"PUT"、@"POST"、@"DELETE"
getPresign.httpMethod = "PUT";
?
// 获取预签名函数,默认签入Header Host;您也可以选择不签入Header Host,但可能导致请求失败或安全漏洞
getPresign.signHost = YES;
?
// http 请求参数,传入的请求参数需与实际请求相同,能够防止用户篡改此HTTP请求的参数
getPresign.requestParameters = {"param1":"value1","param1":"value1"};
?
// http 请求头部,传入的请求头部需包含在实际请求中,能够防止用户篡改签入此处的HTTP请求头部
getPresign.requestHeaders = {"param1":"value1","param1":"value1"};
?
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"
getPresign.object = "exampleobject";
getPresign.setFinish { (result, error) in
if let result = result {
// 预签名 URL
let?url?=?result.presienedURL
} else {
print(error!);
}
}
QCloudCOSXMLService.defaultCOSXML().getPresignedURL(getPresign);
2.通过签名URL上传文件。
// 预签名 URL
let?url?=?result.presienedURL
// 使用预签名链接进行上传文件
let?request?=?NSMutableURLRequest.init(url:?NSURL.init(string:url)?as!?URL);
// 指定HTTPMethod 为PUT
request.httpMethod?=?"PUT";
// fromData 为需要上传的文件
URLSession.shared.uploadTask(with:?request,?from:? "testtest".data(using:?String.Encoding.utf8))?{?data,?res,?err?in
// response中查看上传结果
}.resume()
说明
更多完整示例,请前往 GitHub 查看。

示例代码二:生成预签名下载链接

Objective-C
1.生成用于下载的签名URL。
QCloudGetPresignedURLRequest* getPresignedURLRequest = [[QCloudGetPresignedURLRequest alloc] init];
?
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket
getPresignedURLRequest.bucket = @"examplebucket-1250000000";
?
// 使用预签名 URL 请求的 HTTP 方法。有效值(大小写敏感)为:@"GET"、@"PUT"、@"POST"、@"DELETE"
getPresignedURLRequest.HTTPMethod = @"GET";
?
// 获取预签名函数,默认签入Header Host;您也可以选择不签入Header Host,但可能导致请求失败或安全漏洞
getPresignedURLRequest.signHost = YES;
?
// http 请求参数,传入的请求参数需与实际请求相同,能够防止用户篡改此HTTP请求的参数
getPresignedURLRequest.requestParameters = @{@"param1":@"value1",@"param1":@"value1"};
?
// http 请求头部,传入的请求头部需包含在实际请求中,能够防止用户篡改签入此处的HTTP请求头部
getPresignedURLRequest.requestHeaders = @{@"param1":@"value1",@"param1":@"value1"};
?
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"
getPresignedURLRequest.object = @"exampleobject";
?
[getPresignedURLRequest setFinishBlock:^(QCloudGetPresignedURLResult * _Nonnull result,
NSError * _Nonnull error) {
// 预签名 URL
NSString* presignedURL = result.presienedURL;
}];
?
[[QCloudCOSXMLService defaultCOSXML] getPresignedURL:getPresignedURLRequest];
2.通过签名URL下载文件。
// 预签名 URL
NSString*?presignedURL?=?result.presienedURL;
// 使用预签名链接进行下载文件
NSMutableURLRequest?*request?=?[[NSMutableURLRequest alloc]?initWithURL:[NSURL URLWithString:presignedURL]];
// 指定HTTPMethod为GET
request.HTTPMethod?=?@"GET";
[[[NSURLSession sharedSession]
downloadTaskWithRequest:request
completionHandler:^(NSURL?*_Nullable location,?NSURLResponse?*_Nullable response,?NSError?*_Nullable error)?{
// location 下载成功后的本地文件路径
}]?resume];
说明
更多完整示例,请前往 GitHub 查看。
Swift
1.生成用于下载的签名URL。
let getPresign = QCloudGetPresignedURLRequest.init();
?
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket
getPresign.bucket = "examplebucket-1250000000" ;
?
// 使用预签名 URL 请求的 HTTP 方法。有效值(大小写敏感)为:
// @"GET"、@"PUT"、@"POST"、@"DELETE"
getPresign.httpMethod = "GET";
?
// 获取预签名函数,默认签入Header Host;您也可以选择不签入Header Host,但可能导致请求失败或安全漏洞
getPresignedURLRequest.signHost = YES;
?
// http 请求参数,传入的请求参数需与实际请求相同,能够防止用户篡改此HTTP请求的参数
getPresignedURLRequest.requestParameters = {"param1":"value1","param1":"value1"};
?
// http 请求头部,传入的请求头部需包含在实际请求中,能够防止用户篡改签入此处的HTTP请求头部
getPresignedURLRequest.requestHeaders = {"param1":"value1","param1":"value1"};
?
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"
getPresign.object = "exampleobject";
getPresign.setFinish { (result, error) in
if let result = result {
// 预签名 URL
let?url?=?result.presienedURL;
} else {
print(error!);
}
}
QCloudCOSXMLService.defaultCOSXML().getPresignedURL(getPresign);
2.通过签名URL下载文件。
// 预签名 URL
let?url?=?result.presienedURL
// 使用预签名链接进行下载文件
let?request?=?NSMutableURLRequest.init(url:?NSURL.init(string:?url)?as!?URL);
// 指定HTTPMethod为GET
request.httpMethod?=?"GET";
URLSession.shared.downloadTask(with:?request)?{?location,?response,?error?in
// location 下载成功后的本地文件路径
}.resume();
说明
更多完整示例,请前往 GitHub 查看。


http://www.vxiaotou.com