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

news2025/3/18 4:48:42

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

创建一个腾讯云的账户

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

img

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

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

img

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

当然要点击同意他的条款

img

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

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

后买就是如何使用啦!

下面是 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<String, Object> config = new TreeMap<String, Object>();
        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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1519918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud Stream 消息驱动

一、前言 接下来是开展一系列的 SpringCloud 的学习之旅&#xff0c;从传统的模块之间调用&#xff0c;一步步的升级为 SpringCloud 模块之间的调用&#xff0c;此篇文章为第九篇&#xff0c;即介绍 Stream 消息驱动。 二、消息驱动概念 2.1 消息驱动是什么 官方定义 Spring …

提升用户体验,Xinstall智能判定拉起技术来袭

在移动互联网时代&#xff0c;App推广已经成为各大企业的必争之地。然而&#xff0c;随着市场竞争的加剧&#xff0c;如何提升App的转化效率和用户体验成为了推广者们亟待解决的问题。这时&#xff0c;Xinstall的智能判定拉起技术应运而生&#xff0c;为推广者们带来了新的解决…

Go-知识select

Go-知识select 1. select 的特性1.1 chan读写1.2 返回值1.3 default 2. select 经典使用2.1 永久阻塞2.2 快速检错2.3 限时等待 3. 实现原理3.1 数据结构3.2 实现逻辑3.3 原理总结 4. 总结4.1 大概原理4.2 参数4.3 返回值 一个小活动&#xff1a; https://developer.aliyun.com…

element el-table 表格限制多选个数

本次的功能的要求是&#xff1a; 原本的引入的elment 的表格&#xff0c;去除全选框&#xff0c;版本对比的按钮&#xff0c;需要在选择版本&#xff0c;并且版本个数为2的时候&#xff0c;可点击&#xff0c;进行版本对比操作每次选择版本的时候&#xff0c;目前已有两个选择…

【C语言】—— 指针二 : 初识指针(下)

【C语言】——函数栈帧 一、 c o n s t const const 修饰指针1.1、 c o n s t const const 修饰变量1.2、 c o n s t const const 修饰指针 二、野指针2.1野指针的成因&#xff08;1&#xff09;指针未初始化&#xff08;2&#xff09;指针越界访问&#xff08;3&#xff09;指…

Hardness of Scheme-Switching and Comparison in FHE

参考文献&#xff1a; [AP13] Alperin-Sheriffff, J., Peikert, C.: Practical bootstrapping in quasilinear time. In: Canetti, R., Garay, J.A. (eds.) CRYPTO 2013. LNCS, vol. 8042, pp. 1–20. Springer, Heidelberg (2013). https://doi.org/10.1007/978-3-642-40041-…

微服务初识

1.认识微服务 随着互联网行业的发展&#xff0c;对服务的要求也越来越高&#xff0c;服务架构也从单体架构逐渐演变为现在流行的微服务架构。这些架构之间有怎样的差别呢&#xff1f; 1.1.单体架构 单体架构&#xff1a;将业务的所有功能集中在一个项目中开发&#xff0c;打…

Qt4 设计师自定义控件----写好qmake文件,无需额外拷贝

前言 浏览了很多帖子&#xff0c;看了很多博主的教程&#xff0c;每一个都写的很好&#xff0c;美中不足的是。Qt在每次自定义插件时都需要拷贝&#xff0c;如果能够利用qmake install拷贝功能就很完美了&#xff0c;在其他人使用的时候只要简单的几个步骤就能轻松的用起来&am…

点餐平台网站|基于springboot框架+ Mysql+Java+Tomcat的点餐平台网站设计与实现(可运行源码+数据库+设计文档+部署说明)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 目录 前台功能效果图 管理员功能登录前台功能效果图 用户功能实现 系统功能设计 数据库E-R图设计 lunwen参…

R语言数据挖掘-关联规则挖掘(1)

一、分析目的和数据集描述 要分析的数据是美国一区域的保险费支出的历史数据。保险费用数据表的每列分别为年龄、性别、体重指数、孩子数量、是否吸烟、所在区域、保险收费。 本文的主要目的是分析在年龄、性别、体重指数、孩子数量、是否吸烟、所在区域中这些因素中&#xf…

【PTA】L1-039 古风排版(C++)

题目链接&#xff1a;L1-039 古风排版 - 团体程序设计天梯赛-练习集 (pintia.cn) 目录&#xff1a; 目录&#xff1a; 题目要求&#xff1a; 输入格式&#xff1a; 输出格式&#xff1a; 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 代码&#xff1a; 测试结…

【四 (4)数据可视化之 Ploty Express常用图表及代码实现 】

目录 文章导航一、介绍二、安装Plotly Express三、导入Plotly Express四、占比类图表1、饼图2、环形图3、堆叠条形图4、百分比堆叠条形图 五、比较排序类1、条形图2、漏斗图3、面积漏斗图 六、趋势类图表1、折线图2、多图例折线图3、分列折线图4、面积图5、多图例面积图 七、频…

解锁区块链游戏数据解决方案

作者&#xff1a;stellafootprint.network 随着区块链技术的日新月异&#xff0c;游戏行业正迎来一场革命&#xff0c;催生了区块链游戏的崛起。这一变革不仅为用户带来了全新的互动体验&#xff0c;也开辟了全新的盈利渠道。然而&#xff0c;在这一新兴领域&#xff0c;数据的…

程序人生——Java泛型和反射的使用建议

目录 引出泛型和反射建议93&#xff1a;Java的泛型是类型擦除的建议94&#xff1a;不能初始化泛型参数和数组建议95&#xff1a;强制声明泛型的实际类型 建议96&#xff1a;不同的场景使用不同的泛型通配符建议97&#xff1a;警惕泛型是不能协变和逆变的 建议98&#xff1a;建议…

安卓国产百度网盘与国外云盘软件onedrive对比

我更愿意使用国外软件公司的产品&#xff0c;而不是使用国内百度等制作的流氓软件。使用这些国产软件让我不放心&#xff0c;他们占用我的设备大量空间&#xff0c;在我的设备上推送运行各种无用的垃圾功能。瞒着我&#xff0c;做一些我不知道的事情。 百度网盘安装包大小&…

网络层_IP

传输层解决的是传输控制&#xff0c;而实际真正决定数据能否发送到对端的是网络层。网络层是有概率传输&#xff0c;而传输层是可靠性传输。所以传输层网络层就可以做到将数据可靠发送到对端。网络层的常见协议有&#xff1a;IP、ICMP等&#xff0c;其中最重要的是IP协议&#…

HTML、XHTML和HTML5系列对比

目录 HTML HTML的优点&#xff1a; HTML的缺点&#xff1a; 应用场景&#xff1a; XHTML XHTML的优点&#xff1a; XHTML的缺点&#xff1a; 应用场景&#xff1a; HTML5 HTML5的优点&#xff1a; HTML5的缺点&#xff1a; 应用场景&#xff1a; 回首发现&#xff0…

Flutter Inspector 视图调试工具突然不能用了

The embedded browser failed to load. Error: JCEF is not supported in this env or failed to initialize 1、在 Android Studio 的 Help 菜单中&#xff0c;找到 Find Action 2、搜索 boot runtime&#xff0c;找到「Choose Boot Java Runtime for the IDE」选项 3、在「…

串行通信——IIC总结

一.什么是IIC&#xff1f; IIC&#xff08;Inter-Integrated Circuit&#xff09;也称I2C&#xff0c;中文叫集成电路总线。是一个多主从的串行总线&#xff0c;由飞利浦公司发明的通讯总线&#xff0c;属于半双工同步传输类总线&#xff0c;仅由两条线就能完成多机通讯&#…

电竞游戏行业有哪些媒体资源?活动发布会如何宣传?

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 电竞游戏行业的媒体资源主要包括&#xff1a;游戏门户网站、综合资讯网站、社交媒体平台、电视和网络直播等。 在电竞游戏行业中&#xff0c;媒体资源是丰富多样的。游戏门户网站如游民…