产品动态
产品公告
sdk: ">=2.15.0 <4.0.0"flutter: ">=2.5.0"
flutter pub add tencentcloud_cos_sdk_plugin
dependencies:tencentcloud_cos_sdk_plugin: 1.2.6
import 'package:tencentcloud_cos_sdk_plugin/cos.dart';
// 获取临时密钥(业务层控制获取的方式)String tmpSecretId = "SECRETID"; // 临时密钥 SecretIdString tmpSecretKey = "SECRETKEY"; // 临时密钥 SecretKeyString sessionToken = "SESSIONTOKEN"; // 临时密钥 Tokenint expiredTime = 1556183496;//临时密钥有效截止时间戳,单位是秒// 建议返回服务器时间作为签名的开始时间,避免由于用户手机本地时间偏差过大导致请求过期int startTime = 1556182000; //临时密钥有效起始时间,单位是秒SessionQCloudCredentials sessionQCloudCredentials = SessionQCloudCredentials(secretId: tmpSecretId,secretKey: tmpSecretKey,token: sessionToken,startTime: startTime,expiredTime: expiredTime);// 后续将 sessionQCloudCredentials 传入具体的 COS 操作方法
import 'dart:convert';import 'dart:io';import 'package:flutter/foundation.dart';import 'package:tencentcloud_cos_sdk_plugin/fetch_credentials.dart';import 'package:tencentcloud_cos_sdk_plugin/pigeon.dart';// 实现一个IFetchCredentials的类,实现请求临时密钥并返回结果的过程。class FetchCredentials implements IFetchCredentials{@overrideFuture<SessionQCloudCredentials> fetchSessionCredentials() async {// 首先从您的临时密钥服务器获取包含了密钥信息的响应,例如:var httpClient = HttpClient();try {// 临时密钥服务器 url,临时密钥生成服务请参考 https://www.tencentcloud.com/document/product/436/14048var stsUrl = "http://stsservice.com/sts";var request = await httpClient.getUrl(Uri.parse(stsUrl));var response = await request.close();if (response.statusCode == HttpStatus.OK) {var json = await response.transform(utf8.decoder).join();print(json);// 然后解析响应,获取临时密钥信息var data = jsonDecode(json);// 最后返回临时密钥信息对象return SessionQCloudCredentials(secretId: data['credentials']['tmpSecretId'],// 临时密钥 SecretIdsecretKey: data['credentials']['tmpSecretKey'],// 临时密钥 SecretKeytoken: data['credentials']['sessionToken'],// 临时密钥 TokenstartTime: data['startTime'],//临时密钥有效起始时间,单位是秒expiredTime: data['expiredTime']//临时密钥有效截止时间戳,单位是秒);} else {throw ArgumentError();}} catch (exception) {throw ArgumentError();}}}
FetchCredentials。初始化一个实例,来给 SDK 提供密钥。await Cos().initWithSessionCredential(FetchCredentials());
String SECRET_ID = "SECRETID"; //用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1String SECRET_KEY = "SECRETKEY"; //用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1await Cos().initWithPlainSecret(SECRET_ID, SECRET_KEY);
// 存储桶所在地域简称,例如广州地区是 ap-guangzhouString region = "COS_REGION";// 创建 CosXmlServiceConfig 对象,根据需要修改默认的配置参数CosXmlServiceConfig serviceConfig = CosXmlServiceConfig(region: region,isDebuggable: true,isHttps: true,);// 注册默认 COS Serviceawait Cos().registerDefaultService(serviceConfig);// 创建 TransferConfig 对象,根据需要修改默认的配置参数// TransferConfig 可以设置智能分块阈值 默认对大于或等于2M的文件自动进行分块上传,可以通过如下代码修改分块阈值TransferConfig transferConfig = TransferConfig(forceSimpleUpload: false,enableVerification: true,divisionForUpload: 2097152, // 设置大于等于 2M 的文件进行分块上传sliceSizeForUpload: 1048576, //设置默认分块大小为 1M);// 注册默认 COS TransferMangerawait Cos().registerDefaultTransferManger(serviceConfig, transferConfig);// 也可以通过 registerService 和 registerTransferManger 注册其他实例, 用于后续调用// 一般用 region 作为注册的 keyString newRegion = "NEW_COS_REGION";await Cos().registerService(newRegion, serviceConfig..region = newRegion);await Cos().registerTransferManger(newRegion, serviceConfig..region = newRegion, transferConfig);
参数名称 | 描述 | 类型 | 默认值 | 支持平台 | 必选 |
region | String | null | Android 和 iOS | 是 | |
isDebuggable | 是否是 debug 模式(debug 模式会打印 debug 日志) | Bool | false | Android | 否 |
isHttps | 是否使用 https 协议 | Bool | true | Android 和 iOS | 否 |
connectionTimeout | 连接超时时间(单位是毫秒) | Int | Android(15000) iOS(30000) | Android 和 iOS | 否 |
socketTimeout | 读写超时时间(单位是毫秒) | Int | 30000 | Android | 否 |
host | 设置除了 GetService 请求外的 host | String | null | Android 和 iOS | 否 |
hostFormat | 设置 host 的格式化字符串,SDK 会将 ${bucket} 替换为真正的 bucket,${region} 替换为真正的 region 例如将 hostFormat 设置为 ${bucket}.${region}.tencent.com,并且您的存储桶和地域分别为 bucket-1250000000和 ap-shanghai,那么最终的请求地址为 bucket-1250000000.ap-shanghai.tencent.com注意: 此设置不会影响 GetService 请求。 | String | null | Android | 否 |
port | 设置请求的端口 | Int | null | Android | 否 |
signInUrl | 是否将签名放在 URL 中,默认放在 Header 中 | Bool | false | Android | 否 |
userAgent | ua 拓展参数 | String | null | Android 和 iOS | 否 |
dnsCache | 是否开启 DNS 解析缓存,开启后,将 DNS 解析的结果缓存在本地,当系统 DNS 解析失败后,会使用本地缓存的 DNS 结果 | Bool | true | Android | 否 |
accelerate | 是否使用全球加速域名 | Bool | false | Android 和 iOS | 否 |
参数名称 | 描述 | 类型 | 默认值 | 支持平台 | 必选 |
forceSimpleUpload | 是否强制使用简单上传 | Bool | false | Android | 否 |
enableVerification | 分片上传时是否整体校验 | Bool | true | Android 和 iOS | 否 |
divisionForUpload | 设置启用分块上传的最小对象大小 | Int | 2097152 | Android 和 iOS | 否 |
sliceSizeForUpload | 设置分块上传时的分块大小 | Int | 1048576 | Android 和 iOS | 否 |
// 获取 TransferManagerCosTransferManger transferManager = Cos().getDefaultTransferManger();//CosTransferManger transferManager = Cos().getTransferManger("newRegion");// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucketString bucket = "examplebucket-1250000000";String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即称对象键String srcPath = "本地文件的绝对路径"; //本地文件的绝对路径//若存在初始化分块上传的 UploadId,则赋值对应的 uploadId 值用于续传;否则,赋值 nullString? _uploadId;// 上传成功回调successCallBack(Map<String?, String?>? header, CosXmlResult? result) {// todo 上传成功后的逻辑}//上传失败回调failCallBack(clientException, serviceException) {// todo 上传失败后的逻辑if (clientException != null) {print(clientException);}if (serviceException != null) {print(serviceException);}}//上传状态回调, 可以查看任务过程stateCallback(state) {// todo notify transfer state}//上传进度回调progressCallBack(complete, target) {// todo Do something to update progress...}//初始化分块完成回调initMultipleUploadCallback(String bucket, String cosKey, String uploadId) {//用于下次续传上传的 uploadId_uploadId = uploadId;}//开始上传TransferTask transferTask = await transferManager.upload(bucket, cosPath,filePath: srcPath,uploadId: _uploadId,resultListener: ResultListener(successCallBack, failCallBack),stateCallback: stateCallback,progressCallBack: progressCallBack,initMultipleUploadCallback: initMultipleUploadCallback,// 此处配置单次临时密钥,如果不是单次临时密钥的方式不传该参数sessionCredentials: sessionQCloudCredentials);//暂停任务//transferTask.pause();//恢复任务//transferTask.resume();//取消任务//transferTask.cancel();
// 高级下载接口支持断点续传,所以会在下载前先发起 HEAD 请求获取文件信息。// 如果您使用的是临时密钥或者使用子账号访问,请确保权限列表中包含 HeadObject 的权限。// TransferManager 支持断点下载,您只需要保证 bucket、cosPath、savePath// 参数一致,SDK 便会从上次已经下载的位置继续下载。// 获取 TransferManagerCosTransferManger transferManager = Cos().getDefaultTransferManger();//CosTransferManger transferManager = Cos().getTransferManger("newRegion");// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucketString bucket = "examplebucket-1250000000";String cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即称对象键String downloadPath = "本地文件的绝对路径"; //保存到本地文件的绝对路径// 下载成功回调successCallBack(Map<String?, String?>? header, CosXmlResult? result) {// todo 下载成功后的逻辑}//下载失败回调failCallBack(clientException, serviceException) {// todo 下载失败后的逻辑if (clientException != null) {print(clientException);}if (serviceException != null) {print(serviceException);}}//下载状态回调, 可以查看任务过程stateCallback(state) {// todo notify transfer state}//下载进度回调progressCallBack(complete, target) {// todo Do something to download progress...}//开始下载TransferTask transferTask = await transferManager.download(bucket, cosPath, downloadPath,resultListener: ResultListener(successCallBack, failCallBack),stateCallback: stateCallback,progressCallBack: progressCallBack,// 此处配置单次临时密钥,如果不是单次临时密钥的方式不传该参数sessionCredentials: sessionQCloudCredentials);//暂停任务//transferTask.pause();//恢复任务//transferTask.resume();//取消任务//transferTask.cancel();
文档反馈