腾讯云对象存储的在Java使用步骤介绍

创建一个腾讯云的账户

这个自己去创建,然后开通对象存储服务,如下

有了账号就要创建一个对象存储的桶,也就是存储对象的一个容器

如果你想只有自己放存放的就设置 私有读写 ,如果想用网络直接访问那就是 公有读私有写(虽然后期,可以改,但是还是这里直接设置读写权限,不然后期改很麻烦,还要设置啥消息模板,真离谱,我想设置然后还要开通业务,服了)

写了名称,访问权限就可以下一步了

当然要点击同意他的条款

上面这里我都是默认的,只点击了免费的版本控制。

下一步就直接可以创建了,就是展示一下你的选配而且

后买就是如何使用啦!

下面是 java 的案例

虽然官方推荐临时密钥,但是优点烦,如果是日常调试,我自己就是直接用了密钥了。

package com.five_dog_cat.backend;

import com.qcloud.cos.utils.Jackson;

import com.tencent.cloud.CosStsClient;

import com.tencent.cloud.Policy;

import com.tencent.cloud.Response;

import com.tencent.cloud.Statement;

import java.util.TreeMap;

public class GetTempAllowForTXCos {

// 根据 github 提供的 maven 集成方法导入 java sts sdk,使用 3.1.jpg.1.jpg 及更高版本

public static void main(String[] args) {

TreeMap config = new TreeMap();

try {

//这里的 SecretId 和 SecretKey 代表了用于申请临时密钥的永久身份(主账号、子账号等),子账号需要具有操作存储桶的权限。

String secretId = "";//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140

String secretKey = "";//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140

// 替换为您的云 api 密钥 SecretId

config.put("secretId", secretId);

// 替换为您的云 api 密钥 SecretKey

config.put("secretKey", secretKey);

// 初始化 policy

Policy policy = new Policy();

// 设置域名:

// 如果您使用了腾讯云 cvm,可以设置内部域名

//config.put("host", "sts.internal.tencentcloudapi.com");

// 临时密钥有效时长,单位是秒,默认 1800 秒,目前主账号最长 2 小时(即 7200 秒),子账号最长 36 小时(即 129600)秒

config.put("durationSeconds", 1800);

// 换成您的 bucket

config.put("bucket", "fwwb2024-1317992681");

// 换成 bucket 所在地区

config.put("region", "ap-shanghai");

// 开始构建一条 statement

Statement statement = new Statement();

// 声明设置的结果是允许操作

statement.setEffect("allow");

/**

* 密钥的权限列表。必须在这里指定本次临时密钥所需要的权限。

* 权限列表请参见 https://cloud.tencent.com/document/product/436/31923

* 规则为 {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.jpg、允许访问所有对象:"*"

* 2、允许访问指定的对象:"a/a1.txt", "b/b1.txt"

* 3、允许访问指定前缀的对象:"a*", "a/*", "b/*"

* 如果填写了“*”,将允许用户访问所有资源;除非业务需要,否则请按照最小权限原则授予用户相应的访问权限范围。

*

* 示例:授权examplebucket-1250000000 bucket目录下的所有资源给cos和ci 授权两条Resource

*/

statement.addResources(new String[]{

"qcs::cos:ap-shanghai:uid/1317992681:fwwb2024-1317992681/*",

"qcs::ci:ap-shanghai:uid/1317992681:bucket/fwwb2024-1317992681/*"

});

// 把一条 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("-----");

System.out.println(response.credentials.tmpSecretKey);

System.out.println("-----");

System.out.println(response.credentials.sessionToken);

} catch (Exception e) {

e.printStackTrace();

throw new IllegalArgumentException("no valid secret !");

}

}

}

上传的DEMO

这里用的是临时密钥,从上面的代码通过获取的来的。

package com.five_dog_cat.backend;// 根据 github 提供的 maven 集成方式导入 cos xml java sdk

import 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 = "--OIb-sB"; // 替换为 STS 接口返回给您的临时 SecretId

String tmpSecretKey = "/OrY7ykx/="; // 替换为 STS 接口返回给您的临时 SecretKey

String sessionToken = "---6ui-G5EJ-XC9Suz0L--------jNT-";

// 1.jpg 初始化用户身份信息(secretId, secretKey)

COSCredentials cred = new BasicSessionCredentials(tmpSecretId, tmpSecretKey, sessionToken);

// 2 设置 bucket 区域,详情请参见 COS 地域 https://cloud.tencent.com/document/product/436/6224

ClientConfig clientConfig = new ClientConfig(new Region("ap-shanghai"));

// 3 生成 cos 客户端

COSClient cosclient = new COSClient(cred, clientConfig);

// bucket 名需包含 appid

String bucketName = "fwwb2024-1317992681";

// 上传 object, 建议 20M 以下的文件使用该接口

File localFile = new File("1.jpg");

String key =localFile.getName();

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 会返回文件的 etag

String etag = putObjectResult.getETag();

System.out.println(etag);

} catch (CosServiceException e) {

//失败,抛出 CosServiceException

e.printStackTrace();

} catch (CosClientException e) {

//失败,抛出 CosClientException

e.printStackTrace();

}

// 关闭客户端

cosclient.shutdown();

}

}

下载DEMO

这里我是直接使用密钥,因为用临时的时候总是说权限不够,很烦,就直接换了。

package com.five_dog_cat.backend;

import com.qcloud.cos.COSClient;

import com.qcloud.cos.ClientConfig;

import com.qcloud.cos.auth.BasicCOSCredentials;

import com.qcloud.cos.auth.COSCredentials;

import com.qcloud.cos.http.HttpProtocol;

import com.qcloud.cos.model.COSObject;

import com.qcloud.cos.model.COSObjectInputStream;

import com.qcloud.cos.model.GetObjectRequest;

import com.qcloud.cos.model.ObjectMetadata;

import com.qcloud.cos.region.Region;

import java.io.File;

import java.io.IOException;

public class Demo1 {

public static void main(String[] args) throws IOException {

// 1 初始化用户身份信息(secretId, secretKey)。

// SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理

String secretId = "";//用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140

String secretKey ="";//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140

COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);

// 2 设置 bucket 的地域, COS 地域的简称请参见 https://cloud.tencent.com/document/product/436/6224

// clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。

Region region = new Region("ap-shanghai");

ClientConfig clientConfig = new ClientConfig(region);

// 这里建议设置使用 https 协议

// 从 5.6.54 版本开始,默认使用了 https

clientConfig.setHttpProtocol(HttpProtocol.https);

// 3 生成 cos 客户端。

COSClient cosClient = new COSClient(cred, clientConfig);

// Bucket 的命名格式为 BucketName-APPID ,此处填写的存储桶名称必须为此格式

String bucketName = "";

// 指定文件在 COS 上的路径,即对象键。例如对象键为 folder/picture.jpg,则表示下载的文件 picture.jpg 在 folder 路径下

String key = "/1.jpg";

// 方法1 获取下载输入流

GetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);

COSObject cosObject = cosClient.getObject(getObjectRequest);

COSObjectInputStream cosObjectInput = cosObject.getObjectContent();

// 下载对象的 CRC64

String crc64Ecma = cosObject.getObjectMetadata().getCrc64Ecma();

// 关闭输入流

cosObjectInput.close();

// 方法2 下载文件到本地的路径,例如 把文件下载到本地的 /path/to/路径下的localFile文件中

String outputFilePath = ""; //这个要是一个文件。

File downFile = new File(outputFilePath);

getObjectRequest = new GetObjectRequest(bucketName, key);

ObjectMetadata downObjectMeta = cosClient.getObject(getObjectRequest,downFile);

}

}

官方的SDK地址:https://cloud.tencent.com/document/product/436/6474

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。