产品动态
产品公告
build.gradle 中添加依赖:dependencies {...// 增加这行implementation 'com.qcloud.cos:cos-android:5.9.+'}
build.gradle 中添加依赖:dependencies {...// 增加这行implementation 'com.qcloud.cos:cos-android-lite:5.9.+'}
dependencies {...// 修改为implementation 'com.qcloud.cos:cos-android-nobeacon:x.x.x'//lite 版本修改为implementation 'com.qcloud.cos:cos-android-lite-nobeacon:x.x.x'}
/*** 获取可能采集的参数* 这些参数用于分析系统运行状态,优化系统性能和稳定性,不会用于其他用途* os_version: 系统版本* client_local_ip: 本地 IP 地址* network_type: 网络状态*/public static Map<String, String> getPrivacyParams(Context context)
jar 或 aar 包。下面是对它们的简单说明,请根据需要选择集成的包。libs 文件夹下,并在应用级别(通常是 App 模块下)的 build.gradle 文件中添加如下依赖:dependencies {...// 增加这行implementation fileTree(dir: 'libs', include: ['*.jar', '*.aar'])}
AndroidManifest.xml 中添加如下权限声明:<uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
AndroidManifest.xml 中添加如下权限声明:<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
// 获取临时密钥(业务层控制获取的方式) String tmpSecretId = "SECRETID"; // 临时密钥 SecretIdString tmpSecretKey = "SECRETKEY"; // 临时密钥 SecretKeyString sessionToken = "SESSIONTOKEN"; // 临时密钥 Tokenlong expiredTime = 1556183496L;//临时密钥有效截止时间戳,单位是秒// 建议返回服务器时间作为签名的开始时间,避免由于用户手机本地时间偏差过大导致请求过期long startTime = 1556182000L; //临时密钥有效起始时间,单位是秒SessionQCloudCredentials sessionQCloudCredentials = new SessionQCloudCredentials(tmpSecretId, tmpSecretKey,sessionToken, startTime, expiredTime);
// 实现一个BasicLifecycleCredentialProvider的子类,实现请求临时密钥并返回结果的过程。public static class MySessionCredentialProviderextends BasicLifecycleCredentialProvider {@Overrideprotected QCloudLifecycleCredentials fetchNewCredentials()throws QCloudClientException {// 首先从您的临时密钥服务器获取包含了密钥信息的响应// 然后解析响应,获取临时密钥信息String tmpSecretId = "SECRETID"; // 临时密钥 SecretIdString tmpSecretKey = "SECRETKEY"; // 临时密钥 SecretKeyString sessionToken = "SESSIONTOKEN"; // 临时密钥 Tokenlong expiredTime = 1556183496L;//临时密钥有效截止时间戳,单位是秒//建议返回服务器时间作为签名的开始时间,避免由于用户手机本地时间偏差过大导致请求过期// 返回服务器时间作为签名的起始时间long startTime = 1556182000L; //临时密钥有效起始时间,单位是秒// 最后返回临时密钥信息对象return new SessionQCloudCredentials(tmpSecretId, tmpSecretKey,sessionToken, startTime, expiredTime);}}
QCloudSelfSigner 的子类,实现获取服务端签名并加入请求授权。QCloudSelfSigner myQCloudSelfSigner = new QCloudSelfSigner() {/*** 对请求进行签名** @param request 需要签名的请求* @throws QCloudClientException 客户端异常*/@Overridepublic void sign(QCloudHttpRequest request) throws QCloudClientException {// 1. 把 request 的请求参数传给服务端计算签名String auth = "get auth from server";// 2. 给请求添加签名request.addHeader(HttpConstants.Header.AUTHORIZATION, auth);}});
String secretId = "SECRETID"; //用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1String secretKey = "SECRETKEY"; //用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/37140?from_cn_redirect=1// keyDuration 为请求中的密钥有效期,单位为秒QCloudCredentialProvider myCredentialProvider =new ShortTimeCredentialProvider(secretId, secretKey, 300);// 5.9.33版本开始支持设置起始时间,不配置起始时间则以系统当前时间作为起始时间// 密钥有效起始时间,单位是秒,建议返回服务器时间作为签名的开始时间,避免由于用户手机本地时间偏差过大导致请求过期// long startTime = 1556182000L;// QCloudCredentialProvider myCredentialProvider =// new ShortTimeCredentialProvider(secretId, secretKey, startTime, 300);
// 存储桶所在地域简称,例如广州地区是 ap-guangzhouString region = "COS_REGION";// 创建 CosXmlServiceConfig 对象,根据需要修改默认的配置参数CosXmlServiceConfig serviceConfig = new CosXmlServiceConfig.Builder().setRegion(region).isHttps(true) // 使用 HTTPS 请求, 默认为 HTTP 请求.builder();
CosXmlService 的实例,CosXmlService 提供了访问 COS 的所有接口,建议作为程序单例使用。CosXmlService 的实例,可以不设置临时密钥回调。CosXmlService cosXmlService = new CosXmlService(context,serviceConfig);
// 任何 CosXmlRequest 都支持这种方式,例如上传 PutObjectRequest、下载 GetObjectRequest、删除 DeleteObjectRequest 等// 以下用上传进行示例PutObjectRequest putRequest = new PutObjectRequest("examplebucket-1250000000", "exampleobject.txt", "本地文件路径");// sessionQCloudCredentials 为第一步“初始化密钥”中获取到的单次临时密钥putRequest.setCredential(sessionQCloudCredentials);// 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档TransferConfig transferConfig = new TransferConfig.Builder().build();// 初始化 TransferManagerTransferManager transferManager = new TransferManager(cosXmlService, transferConfig);COSXMLUploadTask uploadTask = transferManager.upload(putRequest, null);
// 这里假设类名为MySessionCredentialProvider。初始化一个实例,来给 SDK 提供密钥。QCloudCredentialProvider myCredentialProvider = new MySessionCredentialProvider();CosXmlService cosXmlService = new CosXmlService(context,serviceConfig, myCredentialProvider);
CosXmlService cosXmlSelfService = new CosXmlService(context,serviceConfig, myQCloudSelfSigner);
CosXmlService cosXmlService = new CosXmlService(context,serviceConfig, myCredentialProvider);
{"version": "2.0","statement": [{"action": [//head操作"name/cos:HeadObject",//简单上传操作"name/cos:PutObject",//分块上传:初始化分块操作"name/cos:InitiateMultipartUpload",//分块上传:List 进行中的分块上传"name/cos:ListMultipartUploads",//分块上传:List 已上传分块操作"name/cos:ListParts",//分块上传:上传分块操作"name/cos:UploadPart",//分块上传:完成所有分块上传操作"name/cos:CompleteMultipartUpload",//取消分块上传操作"name/cos:AbortMultipartUpload"],"effect": "allow","resource": ["qcs::cos:ap-beijing:uid/1250000000:examplebucket-1250000000/doc/*"]}]}
// 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档TransferConfig transferConfig = new TransferConfig.Builder()// 设置启用分块上传的最小对象大小 默认为2M.setDivisionForUpload(2097152)// 设置分块上传时的分块大小 默认为1M.setSliceSizeForUpload(1048576)// 设置是否强制使用简单上传, 禁止分块上传.setForceSimpleUpload(false).build();// 初始化 TransferManagerTransferManager transferManager = new TransferManager(cosXmlService,transferConfig);// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucketString bucket = "examplebucket-1250000000";String cosPath = "exampleobject.txt"; //对象在存储桶中的位置标识符,即称对象键String srcPath = new File(context.getCacheDir(), "exampleobject.txt").toString(); //本地文件的绝对路径//若存在初始化分块上传的 UploadId,则赋值对应的 uploadId 值用于续传;否则,赋值 nullString uploadId = null;// 上传文件COSXMLUploadTask cosxmlUploadTask = transferManager.upload(bucket, cosPath,srcPath, uploadId);//设置初始化分块上传回调,用于获取 uploadId (5.9.7版本以及后续版本支持)cosxmlUploadTask.setInitMultipleUploadListener(new InitMultipleUploadListener() {@Overridepublic void onSuccess(InitiateMultipartUpload initiateMultipartUpload) {//用于下次续传上传的 uploadIdString uploadId = initiateMultipartUpload.uploadId;}});//设置上传进度回调cosxmlUploadTask.setCosXmlProgressListener(new CosXmlProgressListener() {@Overridepublic void onProgress(long complete, long target) {// todo Do something to update progress...}});//设置返回结果回调cosxmlUploadTask.setCosXmlResultListener(new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {COSXMLUploadTask.COSXMLUploadTaskResult uploadResult =(COSXMLUploadTask.COSXMLUploadTaskResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest request,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});//设置任务状态回调, 可以查看任务过程cosxmlUploadTask.setTransferStateListener(new TransferStateListener() {@Overridepublic void onStateChanged(TransferState state) {// todo notify transfer state}});
{"version": "2.0","statement": [{"action": [//head操作"name/cos:HeadObject",//下载操作"name/cos:GetObject",],"effect": "allow","resource": ["qcs::cos:ap-beijing:uid/1250000000:examplebucket-1250000000/doc/*"]}]}
// 高级下载接口支持断点续传,所以会在下载前先发起 HEAD 请求获取文件信息。// 如果您使用的是临时密钥或者使用子账号访问,请确保权限列表中包含 HeadObject 的权限。// 初始化 TransferConfig,这里使用默认配置,如果需要定制,请参考 SDK 接口文档TransferConfig transferConfig = new TransferConfig.Builder().build();//初始化 TransferManagerTransferManager transferManager = new TransferManager(cosXmlService,transferConfig);// 存储桶名称,由 bucketname-appid 组成,appid 必须填入,可以在 COS 控制台查看存储桶名称。 https://console.tencentcloud.com/cos5/bucketString bucket = "examplebucket-1250000000";String cosPath = "exampleobject.txt"; //对象在存储桶中的位置标识符,即称对象键//本地目录路径String savePathDir = context.getExternalCacheDir().toString();//本地保存的文件名,若不填(null),则与 COS 上的文件名一样String savedFileName = "exampleobject.txt";Context applicationContext = context.getApplicationContext(); // application// contextCOSXMLDownloadTask cosxmlDownloadTask =transferManager.download(applicationContext,bucket, cosPath, savePathDir, savedFileName);//设置下载进度回调cosxmlDownloadTask.setCosXmlProgressListener(new CosXmlProgressListener() {@Overridepublic void onProgress(long complete, long target) {// todo Do something to update progress...}});//设置返回结果回调cosxmlDownloadTask.setCosXmlResultListener(new CosXmlResultListener() {@Overridepublic void onSuccess(CosXmlRequest request, CosXmlResult result) {COSXMLDownloadTask.COSXMLDownloadTaskResult downloadTaskResult =(COSXMLDownloadTask.COSXMLDownloadTaskResult) result;}// 如果您使用 kotlin 语言来调用,请注意回调方法中的异常是可空的,否则不会回调 onFail 方法,即:// clientException 的类型为 CosXmlClientException?,serviceException 的类型为 CosXmlServiceException?@Overridepublic void onFail(CosXmlRequest request,@Nullable CosXmlClientException clientException,@Nullable CosXmlServiceException serviceException) {if (clientException != null) {clientException.printStackTrace();} else {serviceException.printStackTrace();}}});//设置任务状态回调,可以查看任务过程cosxmlDownloadTask.setTransferStateListener(new TransferStateListener() {@Overridepublic void onStateChanged(TransferState state) {// todo notify transfer state}});
文档反馈