npm install --save react-native-cos-sdk
yarn add react-native-cos-sdk
import Cos from 'react-native-cos-sdk';
import Cos from 'react-native-cos-sdk';Cos.initWithSessionCredentialCallback(async () => {// 首先从您的临时密钥服务器获取包含了密钥信息的响应,例如:// 临时密钥服务器 urllet stsUrl = "http://stsservice.com/sts";const response = await fetch(stsUrl);// 然后解析响应,获取临时密钥信息const responseJson = await response.json();const credentials = responseJson.credentials;const startTime = responseJson.startTime;const expiredTime = responseJson.expiredTime;const sessionCredentials = {tmpSecretId: credentials.tmpSecretId,tmpSecretKey: credentials.tmpSecretKey,startTime: startTime,expiredTime: expiredTime,sessionToken: credentials.sessionToken};console.log(sessionCredentials);// 最后返回临时密钥信息对象return sessionCredentials;})
import Cos from 'react-native-cos-sdk';let SECRET_ID = "SECRETID"; //永久密钥 secretIdlet SECRET_KEY = "SECRETKEY"; //永久密钥 secretKeyCos.initWithPlainSecret(SECRET_ID,SECRET_KEY)
// 存储桶所在地域简称,例如广州地区是 ap-guangzhoulet region = "COS_REGION";// 创建 CosXmlServiceConfig 对象,根据需要修改默认的配置参数let serviceConfig = {region: region,isDebuggable: true,isHttps: true,};// 注册默认 COS Servicelet cosService = await Cos.registerDefaultService(serviceConfig);// 获取默认 COS Servicelet cosService1 = Cos.getDefaultService();// 创建 TransferConfig 对象,根据需要修改默认的配置参数// TransferConfig 可以设置智能分块阈值 默认对大于或等于2M的文件自动进行分块上传,可以通过如下代码修改分块阈值let transferConfig = {forceSimpleUpload: false,enableVerification: true,divisionForUpload: 2097152, // 设置大于等于 2M 的文件进行分块上传sliceSizeForUpload: 1048576, //设置默认分块大小为 1M};// 注册默认 COS TransferMangerlet cosTransferManger = await Cos.registerDefaultTransferManger(serviceConfig, transferConfig);// 获取默认 COS TransferMangerlet cosTransferManger1 = Cos.getDefaultTransferManger();// 也可以通过 registerService 和 registerTransferManger 注册其他实例, 用于后续调用// 一般用 region 作为注册的 keylet newRegion = "NEW_COS_REGION";serviceConfig.region = newRegion;let cosServiceNew = await Cos.registerService(newRegion, serviceConfig);let cosTransferMangerNew = await Cos.registerTransferManger(newRegion, serviceConfig, transferConfig);// 通过 key 获取 COS Service 和 COS TransferMangerlet cosServiceNew1 = Cos.getService(newRegion);let cosTransferMangerNew1 = Cos.getTransferManger(newRegion);
const SERVICE_CONFIG = {region: "COS_REGION",isDebuggable: true,}export async function getDefaultService(): Promise<CosService> {if(Cos.hasDefaultService()){return Cos.getDefaultService()} else {//注册默认 servicereturn await Cos.registerDefaultService(SERVICE_CONFIG)}}
参数名称 | 描述 | 类型 | 默认值 | 支持平台 |
region | 存储桶地域 地域和访问域名 | String | null | Android和iOS |
connectionTimeout | 连接超时时间(单位是毫秒) | Int | Android(15000) iOS(30000) | Android和iOS |
socketTimeout | 读写超时时间(单位是毫秒) | Int | 30000 | Android |
isHttps | 是否使用 https 协议 | Bool | true | Android和iOS |
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 |
isDebuggable | 是否是 debug 模式(debug 模式会打印 debug 日志) | Bool | false | 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 |
参数名称 | 描述 | 类型 | 默认值 | 支持平台 |
divisionForUpload | 设置启用分块上传的最小对象大小 | Int | 2097152 | Android和iOS |
sliceSizeForUpload | 设置分块上传时的分块大小 | Int | 1048576 | Android和iOS |
enableVerification | 分片上传时是否整体校验 | Bool | true | Android和iOS |
forceSimpleUpload | 是否强制使用简单上传 | Bool | false | Android |
// 获取 CosTransferMangerlet cosTransferManger: CosTransferManger = Cos.getDefaultTransferManger();//let cosTransferManger: CosTransferManger = Cos.getTransferManger(newRegion);// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucketlet bucket = "examplebucket-1250000000";let cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即称对象键let srcPath = "本地文件的路径"; //本地文件的路径//若存在初始化分块上传的 UploadId,则赋值对应的 uploadId 值用于续传;否则,赋值 undefinedlet _uploadId = undefined;// 上传成功回调let successCallBack = (header?: object) => {// todo 上传成功后的逻辑};//上传失败回调let failCallBack = (clientError?: CosXmlClientError, serviceError?: CosXmlServiceError) => {// todo 上传失败后的逻辑if (clientError) {console.log(clientError);}if (serviceError) {console.log(serviceError);}};//上传状态回调, 可以查看任务过程let stateCallBack = (state: TransferState) => {// todo notify transfer state};//上传进度回调let progressCallBack = (complete: number, target: number) => {// todo Do something to update progress...};//初始化分块完成回调let initMultipleUploadCallBack = (bucket: string, cosKey: string, uploadId: string) => {//用于下次续传上传的 uploadId_uploadId = uploadId;};//开始上传let transferTask:TransferTask = await cosTransferManger.upload(bucket,cosPath,srcPath,{uploadId: _uploadId,resultListener: {successCallBack: successCallBack,failCallBack: failCallBack},stateCallback: stateCallBack,progressCallback: progressCallBack,initMultipleUploadCallback: initMultipleUploadCallBack,});//暂停任务transferTask.pause();//恢复任务transferTask.resume();//取消任务transferTask.cancel();
// 高级下载接口支持断点续传,所以会在下载前先发起 HEAD 请求获取文件信息。// 如果您使用的是临时密钥或者使用子账号访问,请确保权限列表中包含 HeadObject 的权限。// CosTransferManger 支持断点下载,您只需要保证 bucket、cosPath、savePath// 参数一致,SDK 便会从上次已经下载的位置继续下载。// 获取 CosTransferMangerlet cosTransferManger: CosTransferManger = Cos.getDefaultTransferManger();//let cosTransferManger: CosTransferManger = Cos.getTransferManger(newRegion);// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucketlet bucket = "examplebucket-1250000000";let cosPath = "exampleobject"; //对象在存储桶中的位置标识符,即称对象键let downliadPath = "本地文件的路径"; //保存到本地文件的路径// 下载成功回调let successCallBack = (header?: object) => {// todo 下载成功后的逻辑};//下载失败回调let failCallBack = (clientError?: CosXmlClientError, serviceError?: CosXmlServiceError) => {// todo 下载失败后的逻辑if (clientError) {console.log(clientError);}if (serviceError) {console.log(serviceError);}};//下载状态回调, 可以查看任务过程let stateCallBack = (state: TransferState) => {// todo notify transfer state};//下载进度回调let progressCallBack = (complete: number, target: number) => {// todo Do something to download progress...};//开始下载let transferTask:TransferTask = = await cosTransferManger.download(bucket,cosPath,downliadPath,{resultListener: {successCallBack: successCallBack,failCallBack: failCallBack},stateCallback: stateCallBack,progressCallback: progressCallBack});//暂停任务transferTask.pause();//恢复任务transferTask.resume();//取消任务transferTask.cancel();
本页内容是否解决了您的问题?