输入参数 | 参考值 | 说明 | 必选 |
Region | 华北地区(北京)ap-beijing | 操作的资源所属的地域为北京 | 是 |
Name | test | 自定义调用方的英文名称为 test。 | 是 |
Policy | {"version":"2.0","statement":[{"effect":"allow","action":["name/cos:PutObject","name/cos:DeleteObject"],"resource":"*"}]} | 描述策略语法版本 version 为“2.0”。 描述声明产生的结果 effect 是“允许” 描述允许的操作 action 为"name/cos:PutObject"(上传对象)、"name/cos:DeleteObject"(删除对象),更多接口请参见 支持 CAM 的对象存储业务接口。 描述授权的具体数据 resource,授予操作 action 的所有资源的操作权限 | 是 |
DurationSeconds | 3600 | 指定临时密钥的有效期 3600秒,不指定默认为1800秒。 | 否 |

// 根据 github 提供的 maven 集成方法导入 java sts sdk,使用 3.1.1 及更高版本import java.util.TreeMap;import com.tencent.cloud.CosStsClient;import com.tencent.cloud.Policy;import com.tencent.cloud.Response;import com.tencent.cloud.Statement;import com.tencent.cloud.cos.util.Jackson;public class demo {public static void main(String[] args) {TreeMap<String, Object> config = new TreeMap<String, Object>();try {//这里的 SecretId 和 SecretKey 代表了用于申请临时密钥的永久身份(主账号、子账号等),子账号需要具有操作存储桶的权限。String secretId = System.getenv("secretId");//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/32675String secretKey = System.getenv("secretKey");//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://www.tencentcloud.com/document/product/598/32675// 替换为您的云 api 密钥 SecretIdconfig.put("secretId", secretId);// 替换为您的云 api 密钥 SecretKeyconfig.put("secretKey", secretKey);// 初始化 policyPolicy policy = new Policy();// 设置域名:// 如果您使用了腾讯云 cvm,可以设置内部域名//config.put("host", "sts.internal.tencentcloudapi.com");// 临时密钥有效时长,单位是秒,默认 1800 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600)秒config.put("durationSeconds", 1800);// 换成您的 bucketconfig.put("bucket", "examplebucket-1250000000");// 换成 bucket 所在地区config.put("region", "ap-chongqing");// 开始构建一条 statementStatement statement = new Statement();// 声明设置的结果是允许操作statement.setEffect("allow");/*** 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。* 权限列表请参见 https://www.tencentcloud.com/document/product/436/30580* 规则为 {project}:{interfaceName}* project : 产品缩写 cos相关授权为值为cos,数据万象(数据处理)相关授权值为ci* 授权所有接口用*表示,例如 cos:*,ci:** 添加一批操作权限 :*/statement.addActions(new String[]{"cos:PutObject",// 表单上传、小程序上传"cos:PostObject",// 分块上传"cos:InitiateMultipartUpload","cos:ListMultipartUploads","cos:ListParts","cos:UploadPart","cos:CompleteMultipartUpload",// 处理相关接口一般为数据万象产品 权限中以ci开头// 创建媒体处理任务"ci:CreateMediaJobs",// 文件压缩"ci:CreateFileProcessJobs"});/*** 这里改成允许的路径前缀,可以根据自己网站的用户登录态判断允许上传的具体路径* 资源表达式规则分对象存储(cos)和数据万象(ci)两种* 数据处理、审核相关接口需要授予ci资源权限* cos : qcs::cos:{region}:uid/{appid}:{bucket}/{path}* ci : qcs::ci:{region}:uid/{appid}:bucket/{bucket}/{path}* 列举几种典型的{path}授权场景:* 1、允许访问所有对象:"*"* 2、允许访问指定的对象:"a/a1.txt", "b/b1.txt"* 3、允许访问指定前缀的对象:"a*", "a/*", "b/*"* 如果填写了“*”,将允许用户访问所有资源;除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。** 示例:授权examplebucket-1250000000 bucket目录下的所有资源给cos和ci 授权两条Resource*/statement.addResources(new String[]{"qcs::cos:ap-chongqing:uid/1250000000:examplebucket-1250000000/*","qcs::ci:ap-chongqing:uid/1250000000:bucket/examplebucket-1250000000/*"});// 把一条 statement 添加到 policy// 可以添加多条policy.addStatement(statement);// 将 Policy 示例转化成 String,可以使用任何 json 转化方式,这里是本 SDK 自带的推荐方式config.put("policy", Jackson.toJsonPrettyString(policy));Response response = CosStsClient.getCredential(config);System.out.println(response.credentials.tmpSecretId);System.out.println(response.credentials.tmpSecretKey);System.out.println(response.credentials.sessionToken);} catch (Exception e) {e.printStackTrace();throw new IllegalArgumentException("no valid secret !");}}}
字段 | 参考值 | 说明 | 必选 |
secretId | 以获取到实际的 SecretId 为准 | 是 | |
secretKey | 以获取到实际的 SecretKey 为准 | 是 | |
durationSeconds | 1800 | 指定临时密钥的有效期 1800秒。 | 否 |
bucket | examplebucket-1250000000 | 以实际的存储桶名称为准。 | 是 |
region | ap-guangzhou | 以实际的存储桶所在地域为准。 | 是 |
allowPrefixes | "*" | 允许访问所有对象,除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。 | 是 |
allowActions | "cos:PutObject", "cos:PostObject", "cos:InitiateMultipartUpload", "cos:ListMultipartUploads", "cos:ListParts", "cos:UploadPart", "cos:CompleteMultipartUpload", // 处理相关接口一般为数据万象产品 权限中以ci开头 "ci:CreateMediaJobs", "ci:CreateFileProcessJobs" | PutObject:上传对象 PostObject:表单上传对象 InitiateMultipartUpload:初始化分块上传任务 ListMultipartUploads:查询分块上传任务 ListParts:查询已上传的分块 UploadPart:上传对象分块 CompleteMultipartUpload:完成分块上传任务 CreateMediaJobs:创建媒体处理任务 CreateFileProcessJobs:文件压缩 | 是 |
// 根据 github 提供的 maven 集成方式导入 cos xml java sdkimport com.qcloud.cos.COSClient; import com.qcloud.cos.ClientConfig; import com.qcloud.cos.auth.BasicSessionCredentials; import com.qcloud.cos.auth.COSCredentials; import com.qcloud.cos.exception.CosClientException; import com.qcloud.cos.exception.CosServiceException; import com.qcloud.cos.model.ObjectMetadata; import com.qcloud.cos.model.PutObjectRequest; import com.qcloud.cos.model.PutObjectResult; import com.qcloud.cos.region.Region; import java.io.File;public class Demo {public static void main(String[] args) throws Exception {// 用户基本信息String tmpSecretId = "COS_SECRETID"; // 替换为 STS 接口返回给您的临时 SecretIdString tmpSecretKey = "COS_SECRETKEY"; // 替换为 STS 接口返回给您的临时 SecretKeyString sessionToken = "Token"; // 替换为 STS 接口返回给您的临时 Token// 1 初始化用户身份信息(secretId, secretKey)COSCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);// 2 设置 bucket 区域,详情请参见 COS 地域 https://www.tencentcloud.com/document/product/436/6224?from_cn_redirect=1ClientConfig clientConfig = new ClientConfig(new Region("ap-guangzhou"));// 3 生成 cos 客户端COSClient cosclient = new COSClient(cred, clientConfig);// bucket 名需包含 appidString bucketName = "examplebucket-1250000000";String key = "exampleobject";// 上传 object, 建议 20M 以下的文件使用该接口File localFile = new File("src/test/resources/text.txt");PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);// 设置 x-cos-security-token header 字段ObjectMetadata objectMetadata = new ObjectMetadata();objectMetadata.setSecurityToken(sessionToken);putObjectRequest.setMetadata(objectMetadata);try {PutObjectResult putObjectResult = cosclient.putObject(putObjectRequest);// 成功:putobjectResult 会返回文件的 etagString etag = putObjectResult.getETag();} catch (CosServiceException e) {//失败,抛出 CosServiceExceptione.printStackTrace();} catch (CosClientException e) {//失败,抛出 CosClientExceptione.printStackTrace();}// 关闭客户端cosclient.shutdown();}}
字段 | 参考值 | 说明 |
COS_SECRETID | 以获取到实际的 SecretId 为准 | 替换为 STS 接口返回给您的临时 SecretId |
COS_SECRETKEY | 以获取到实际的 SecretKey 为准 | 替换为 STS 接口返回给您的临时 SecretKey |
Token | 以获取到实际的 Token 为准 | 替换为 STS 接口返回给您的临时 Token |
new Region | ap-guangzhou | 以实际的存储桶所在地域为准 |
bucketName | examplebucket-1250000000 | 以实际的存储桶名称为准 |
key | exampleobject | 如:/test/demo.txt,上传后的对象位置在/test,名为 demo.txt |
new File | src/test/resources/text.txt | 上传对象所在本地的位置为 src/test/resources/,文件名为 test,格式是 txt |
文档反馈