tencent cloud

文档反馈

生成预签名链接

最后更新时间:2024-01-19 11:57:11

    简介

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

    SDK API 参考

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

    生成对象预签名链接

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

    Objective-C
    QCloudGetPresignedURLRequest* getPresignedURLRequest = [[QCloudGetPresignedURLRequest alloc] init];
    
    // 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.tencentcloud.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;
    // 使用预签名链接进行上传文件
    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];
    
    }];
    
    [[QCloudCOSXMLService defaultCOSXML] getPresignedURL:getPresignedURLRequest];
    说明
    更多完整示例,请前往 GitHub 查看。
    Swift
    let getPresign = QCloudGetPresignedURLRequest.init();
    
    // 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.tencentcloud.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 {
    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()
    } else {
    print(error!);
    }
    }
    QCloudCOSXMLService.defaultCOSXML().getPresignedURL(getPresign);
    说明
    更多完整示例,请前往 GitHub 查看。

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

    Objective-C
    QCloudGetPresignedURLRequest* getPresignedURLRequest = [[QCloudGetPresignedURLRequest alloc] init];
    
    // 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.tencentcloud.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;
    // 使用预签名链接进行下载文件
    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];
    }];
    
    [[QCloudCOSXMLService defaultCOSXML] getPresignedURL:getPresignedURLRequest];
    说明
    更多完整示例,请前往 GitHub 查看。
    Swift
    let getPresign = QCloudGetPresignedURLRequest.init();
    
    // 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.tencentcloud.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 {
    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();
    } else {
    print(error!);
    }
    }
    QCloudCOSXMLService.defaultCOSXML().getPresignedURL(getPresign);
    说明
    更多完整示例,请前往 GitHub 查看。
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持