腾讯云-对象存储服务(COS)的使用总结

news2024/12/28 3:48:46

简介

对象存储(Cloud Object Storage,COS)是腾讯云提供的一种存储海量文件的分布式存储服务,具有高扩展性、低成本、可靠安全等优点。通过控制台、API、SDK 和工具等多样化方式,用户可简单、快速地接入 COS,进行任意格式文件的上传、下载和管理,实现海量数据存储和管理。同时遍布全国范围的 CDN/EdgeOne 节点可以对文件下载进行加速。

基本概念

下面通过几个名词概念,帮助您进一步了解腾讯云 COS:
存储桶(Bucket) :是对象的载体,可理解为存放对象的“容器”。一个存储桶可容纳无数个对象。
对象(Object):是 COS 的基本单元,可理解为任何格式类型的数据,例如图片、文档和音视频文件等。
地域(Region):是腾讯云托管机房的分布地区,COS 的数据存放在这些地域的存储桶中。
多 AZ(Multiple Availability Zones) :是由腾讯云对象存储推出的多 AZ 存储架构。客户数据分散存储在城市中多个不同的数据中心,当某个数据中心因为自然灾害、断电等极端情况导致整体故障时,多 AZ 存储架构依然可以为客户提供稳定可靠的存储服务。
访问域名(Endpoint):对象被存放到存储桶中,用户可通过访问域名访问和下载对象。
存储类型(StorageClass):指对象在 COS 中的存储级别和活跃程度。COS 提供多种存储类型:标准存储(多 AZ)、低频存储(多 AZ)、智能分层存储(多 AZ)、智能分层存储、标准存储、低频存储、归档存储、深度归档存储。每种存储类型适用于不同的业务场景,拥有不同的特性(例如对象访问频度、访问时延等)。关于不同存储类型的详细介绍,请参见 存储类型概述。

优点

相比起自己搭建上传下载的服务,COS的优点如下:

  1. 完全不占用用户服务器上下行的带宽
  2. 网络加速,遍布全国范围的 CDN/EdgeOne 节点
  3. 不占用服务器的磁盘存储空间
  4. 防盗链,
  5. SSL 加密传输,控制每个单独文件的读写权限
  6. 存储资源的高可用,提供数据跨多设备冗余存储,为用户数据提供异地容灾和资源隔离功能
  7. 无需传统硬件的采购、部署和运维,节省了运维工作和托管成本。
  8. 上传后的,自动对数据万象图片处理,文档,音视频转码,语音识别,媒体的后续处理等
  9. 存储桶挂载到本地的云主机功能

使用

访问管理

腾讯云 COS 服务在使用时需要对请求进行访问管理。通过临时密钥机制,您可以临时授权您的 App 访问您的存储资源,而不会泄露您的永久密钥。密钥的有效期由您指定,过期后自动失效。通常,我们都不建议您把永久密钥放到客户端代码中。本文主要介绍如何在后台快速搭建一个临时密钥服务,通过生成的临时密钥来对上传或者下载请求进行签名,从而保证您数据的安全性。
在这里插入图片描述
其中:
用户客户端:即用户手机上的 App
用户服务端:用户的后台服务器,这里用于获取临时密钥,并返回给用户客户端
CAM权限系统:腾讯云访问管理,用于生成 COS 的临时密钥
COS对象存储:腾讯云对象存储,负责存储 App 上传的数据

获取永久密钥

临时密钥需要通过永久密钥才能生成。请登录 腾讯云访问管理控制台 获取,包含:SecretId,SecretKey

搭建临时密钥服务

引入SDK

implementation 'com.qcloud:cos-sts_api:3.1.1';

实现

在nacos中添加配置,也是必须修改参数,其他参数根据自身情况修改。

  #对象存储
  cos:
    enable: true
    duration: 1800
    bucket: gamioo-1258024122
    region: ap-shanghai
    secretId: **********************************
    secretKey: *********************************
    endpoint: https://gamioo-1258024122.cos.ap-shanghai.myqcloud.com

配置初始化:

  /**
     * 获取联合身份临时访问凭证
     */
    public Response reloadCredential() {
        TreeMap<String, Object> config = new TreeMap<>();

        // 云 api 密钥 SecretId
        config.put("secretId", cosProperties.getSecretId());
        // 云 api 密钥 SecretKey
        config.put("secretKey", cosProperties.getSecretKey());
        // 设置域名,可通过此方式设置内网域名
        //config.put("host", "sts.internal.tencentcloudapi.com");
        // 临时密钥有效时长,单位是秒
        config.put("durationSeconds", cosProperties.getDuration());
        // 换成你的 bucket
        config.put("bucket", cosProperties.getBucket());
        // 换成 bucket 所在地区
        config.put("region", cosProperties.getRegion());
        // 可以通过 allowPrefixes 指定前缀数组, 例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)
        config.put("allowPrefixes", new String[]{"*"});
        // 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 https://cloud.tencent.com/document/product/436/31923
        String[] allowActions = new String[]{
                // 简单上传
                "name/cos:PutObject",
                "name/cos:PostObject",
                // 分片上传
                "name/cos:InitiateMultipartUpload",
                "name/cos:ListMultipartUploads",
                "name/cos:ListParts",
                "name/cos:UploadPart",
                "name/cos:CompleteMultipartUpload"
        };
        config.put("allowActions", allowActions);
        Response response = null;
        try {
            response = CosStsClient.getCredential(config);
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }
        return response;
    }

其中,请求参数说明:

字段类型描述
secretIdString云 API 密钥 Id
secretKeyString云 API 密钥 key
durationSecondsint要申请的临时密钥最长有效时间,单位秒,默认 1800,最大可设置 7200
bucketString存储桶名称:bucketName-appid, 如 example-125000000
regionString存储桶所属地域,如 ap-guangzhou
allowPrefixString资源的前缀,可以根据自己网站的用户登录态判断允许上传的具体路径,例子: a.jpg 或者 a/* 或者 * (使用通配符*存在重大安全风险, 请谨慎评估使用)
allowActionsString[]授予 COS API 权限集合, 如简单上传操作:name/cos:PutObject
policyString策略:由 allowActions、bucket、region、allowPrefix字段组成的描述授权的具体信息

返回值说明

{
	"credentials":{
		"sessionToken":"mPOLNpDJjVK4Qm22GaUmnWlYzKlpCAja431a1bf3d94fdf541d2be2dcbf82f7baK843Oxi15MH7GZkSGyYVNSNJn9yrtBZxO5_ASQWWL8eR8z_UyHNCxMi6ZMKuwg-hrcLAw-fDPg5LlykM5Y9kiePhd6FBM9UGmVwWCt1b48w3I6vrcFvIM6Cqf_UwbPWiXZYaBNjLMMkVbu869iGvUcTic9X75Bi2Dcmq52GLpUMvie5aFQTw5l_SrKGODOnUIEYEG8Ihnp-l_rdCej2YmcaXEDe8OnP9BuU5SR3lMC93W0cKeyikAHKyeMEG2To2FEQIGCGxogeQfHG03pfQD_8vZUlBOS7qUsK2qzb6B8Uqi7m_7UIyEYZF3b35FQmj9BvMbuJdyXbCoeYeMgk9J1qKDcPtdjAoBPvIo_cCl_PALjbD32mYlpbJoVYJfPC0I3eCT_lI-VMJ4Flb7a81K5bl2A33FUodCBz7MHBvD6140m2iTGNifHz29PJw2QqkvFY08dWiEi3Al0o8qUO5rbxPngt4u7uIZhRmfpiob0eDOLOVFgl5K1TaK7eYowKvv_q-yDBf2qhZSD54iYPcYbIivx4h1Yp7ZriQpaKaGSSZwGYP9cg3LLlEqaAeupvc",
		"tmpSecretId":"AKIDiYcPkzj-O6e8k24xCifHoiWeNkZPgHr4l_n7qgj8dbPtsgveL99YCTn-H6cCGu0v",
		"tmpSecretKey":"85/Jm3Fu9QoUDEXEOyrZJrCDKjEesFOOhbHQOqOTf18="
	},
	"expiration":"2023-08-23T04:14:35Z",
	"expiredTime":1692764075,
	"requestId":"ea06d01d-772a-491e-b736-1d1e55d64d08",
	"startTime":1692762275
}
字段类型描述
credentialsString临时密钥信息
tmpSecretIdString临时密钥 Id,可用于计算签名
tmpSecretKeyString临时密钥 Key,可用于计算签名
sessionTokenString请求时需要用的 token 字符串,最终请求 COS API 时,需要放在 Header 的 x-cos-security-token 字段
startTimeString密钥的起始时间,是 UNIX 时间戳
expiredTimeString密钥的失效时间,是 UNIX 时间戳

对返回的值进行二次封装后,得到如下的返回体:

@ApiModel(value = "存储对象临时访问凭证")
public class ResponseDTO {
    @ApiModelProperty("存储桶名")
    private String bucket;
    @ApiModelProperty("地域")
    private String region;
    @ApiModelProperty("临时证书密钥ID")
    private String secretId;
    @ApiModelProperty("临时证书密钥Key")
    private String secretKey;
    @ApiModelProperty("临时令牌")
    private String sessionToken;
    @ApiModelProperty("临时访问凭证开始时间")
    private long startTime;
    @ApiModelProperty("临时访问凭证过期时间")
    private long expiredTime;
    }

在业务层做一层缓存,在失效前从本地读取,失效或者找不到的情况下,才再次去获取临时访问凭证:

    /**
     * 获取联合身份临时访问凭证
     */
    @Override
    public ResponseDTO getCredential() {
        ResponseDTO ret = null;
        Response response = null;
        String key = RedisConstant.COS_CREDENTIAL;
        Object value = redisService.get(key);
        if (value != null) {
            response = JSON.parseObject(value.toString(), Response.class);
        } else {
            response = configuration.reloadCredential();
            if (response != null) {
                long duration = Math.max(0, response.expiredTime - System.currentTimeMillis());
                redisService.setExpire(key, JSON.toJSONString(response), duration, TimeUnit.SECONDS);
            }
        }
        if (response != null) {
            ret = ResponseDTO.from(configuration.getCosProperties(), response);
        }
        return ret;
    }

最终提供获取临时访问凭证的接口:

/**
 * 对象存储(Cloud Object Storage,COS)
 *
 */
@RestController
@RequestMapping("/cos")
@Api(tags = "对象存储管理")
public class CosController extends BaseController {
    @Resource
    private ICosService cosService;

    /**
     * 获取联合身份临时访问凭证
     *
     * @return Result
     */
    @PreAuth
    @GetMapping("/get")
    @ApiOperation(value = "获取联合身份临时访问凭证", notes = "获取联合身份临时访问凭证")
    public Result<ResponseDTO> get() {
        ResponseDTO response = cosService.getCredential();
        return Result.data(response);
    }
}

总结

本文主要是主要介绍了腾讯云的对象存储(Cloud Object Storage,COS),阐述了使用COS带来的好处及优势,通过实例来介绍了如何使用。下一篇,我们将介绍在客户端拿到临时访问凭证后,进行存储和获取的操作。

参考链接:
对象存储快速入门
临时密钥生成及使用指引
腾讯云对象存储COS简介和如何接入

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

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

相关文章

多肽合成15266-88-3产品特点介绍,Cyclo(glycyl-L-histidyl)

中文名&#xff1a;环(甘氨酰-L-组氨酰) 英文名&#xff1a;cyclo(Gly-His) CYCLO(-GLY-HIS) Cyclo(glycyl-L-histidyl) (S)-3-(1H-Imidazol-4-ylmethyl)-2,5-piperazinedione CAS&#xff1a;15266-88-3 分子式&#xff1a;C8H10N4O2 分子量&#xff1a;194.191 密度 …

【点击新增一个下拉框 与前一个内容一样 但不能选同一个值】

点击新增一个下拉框 与前一个内容一样 但不能选同一个值 主要是看下拉选择el-option的disabled,注意不要混淆 <el-form label-width"120px" :model"form" ref"form" style"color: #fff"><template v-for"(trapolicy, i…

JAVA基础知识四——重载、可变参数

1、方法重载 注意事项&#xff0c;构成重载的必要 1.1、课堂练习——选择题 1.2、课堂练习——程序代码 public class Overload {//编写一个main方法。public static void main(String[] args){Methods method new Methods();/*method.m(10);method.m(10,11);method.m(&quo…

Blazor:Razor组件防止点击穿透

文章目录 微软官方文档如何防止点击传统 微软官方文档 如何防止点击传统 我们就算封装成立Blazor组件&#xff0c;我们还是对原生的DOM元素进行操作 在子组件最外层包一个div。在DIV里面阻止组件事件的传播 <div style"margin-left:10px;" onclick:stopPropaga…

drools8尝试(加单元测试)

drools8的maven模板项目里没有单元测试, 相比而言drools7有个非常好的test senorios 那就自己弄一个 文件是.http后缀的,写了个简单的例子如下 //测试交通违章 POST http://localhost:8080/Traffic Violation accept: application/json Content-Type: application/json{&q…

人工智能AI绘画接入使用文档

人工智能AI绘画接入使用 一、人工智能AI绘画二、使用步骤1、接口2、请求参数3、请求参数示例4、接口 返回示例 三、 AI绘画优秀描述例子四、 如何获取appKey和uid1、申请appKey:2、获取appKey和uid 五、重要说明六、AI绘画成果展示 一、人工智能AI绘画 AI作画,用户可以在平台上…

Python爬虫逆向实战案例(五)——YRX竞赛题第五题

题目&#xff1a;抓取全部5页直播间热度&#xff0c;计算前5名直播间热度的加和 地址&#xff1a;https://match.yuanrenxue.cn/match/5 cookie中m值分析 首先打开开发者工具进行抓包分析&#xff0c;从抓到的包来看&#xff0c;参数传递了查询参数m与f&#xff0c;同时页面中…

【实操干货】如何开始用Qt Widgets编程?(三)

Qt 是目前最先进、最完整的跨平台C开发工具。它不仅完全实现了一次编写&#xff0c;所有平台无差别运行&#xff0c;更提供了几乎所有开发过程中需要用到的工具。如今&#xff0c;Qt已被运用于超过70个行业、数千家企业&#xff0c;支持数百万设备及应用。 在本文中&#xff0…

Anaconda Conda实现Python多环境管理

Anaconda Conda实现Python多环境管理 Python多环境AnacondaConda环境管理下载安装镜像配置环境管理常用命令创建Python3.10环境 Python多环境 Python多环境指的是在同一台计算机上同时安装并管理多个不同的Python版本。可以在不同版本的Python之间切换&#xff0c;并确保每个项…

WPS office 最新未公开 0Day漏洞警示

一、事件描述 近日&#xff0c;网传监测发现WPS Office for Windows版本 存在0day漏洞&#xff0c;攻击者可以利用该0day漏洞在受害者主机上执行任意恶意文件&#xff0c;高危级别&#xff0c;官方尚未对此发布修复漏洞&#xff0c;目前建议只能临时弃用wps或者不要点开未知文件…

8月21-22日上课内容 第一章 MySQL数据库初始

本章结构 数据库的基本概念 概述&#xff08;总览&#xff09; 结构&#xff1a; 数据 表 数据库 数据库管理系统 数据库系统原理 数据 (Data) 描述事物的符号记录 包括数字&#xff0c;文字、图形、图像、声音、档案记录等以“记录”形式按统一的格式进行存储表 将不同…

ClickHouse安装及部署

文章目录 Docker快速安装Ubuntu预编译安装包安装检查是否支持SSE4.2使用预编译安装包 Tgz安装包配置文件修改修改密码配置远程访问 其他主机访问文章参考 Docker快速安装 本地pull镜像 docker run -d --name ch-server --ulimit nofile262144:262144 -p 9000:9000 -p 8123:81…

【数据结构与算法】1. 绪论

1. 绪论 1.1 数据结构 1.1.1 数据结构的基本概念 1.1.2 数据结构的三要素 数据结构三要素&#xff1a; 逻辑结构 划分方法一&#xff1a; 线性结构&#xff1a;线性表、栈、队列、串非线性结构&#xff1a;树、图 划分方法二&#xff1a; 集合结构线性结构树形结构网状&…

学Python静不下来,看了一堆资料还是很迷茫是为什么

一、前言 最近发现&#xff0c;身边很多的小伙伴学Python都会遇到一个问题&#xff0c;就是资料也看了很多&#xff0c;也花了很多时间去学习但还是很迷茫&#xff0c;时间长了又发现之前学的知识点很多都忘了&#xff0c;都萌生出了想半路放弃的想法。 让我们看看蚂蚁金服的大…

按钮权限控制

搜索关键字&#xff1a; 自定义指令传参| "自定义指令""dataset"|自定义指令dataset| "Vue""directives"|vue按钮权限实现 1、完整代码&#xff1a; <template> <div> <el-breadcrumb separator-class"el-icon…

CheckBox全选,半选,不选三种样式原生实现

效果图 代码 <!DOCTYPE html> <html> <head><title>复选框样式示例</title><style>input[type"checkbox"] {display: none; /* 隐藏原生复选框 */}label.checkbox {position: relative;display: inline-block;width: 20px;heig…

初出茅庐的小李博客之USB设备开发快速上手

1.USB基础知识介绍 这里有一篇文章写的非常好不再重复造轮子 USB基础知识介绍&#xff1a;https://blog.csdn.net/Richard_Brown/article/details/106602288 2.USB设备介绍 常见的USB设备&#xff1a;U盘、鼠标、MP3、移动硬盘、数码相机、键盘、游戏杆、USB摄像头、USB打印…

MVC OR DDD

MVC OR DDD 说明&#xff1a;这篇是标题党&#xff0c;不包含相关概念说明 前段时间跟随师兄学习了解了DDD领域驱动模型&#xff0c;觉得这个思想更好&#xff0c;进行下面解析和学习方面的思考和实践&#xff0c;觉得很好&#xff0c;耐心读下去。希望对您有所帮助。 首先&am…

流媒体内容分发终极解决方案:当融合CDN与P2P视频交付结合

前言 随着互联网的发展&#xff0c;流媒体视频内容日趋增多&#xff0c;已经成为互联网信息的主要承载方式。相对传统的文字&#xff0c;图片等传统WEB应用&#xff0c;流媒体具有高数据量&#xff0c;高带宽、高访问量和高服务质量要求的特点&#xff0c;而现阶段互联网“尽力…

8个最受欢迎的机器学习部署工具【2023】

我们如何在生产环境中创建和部署经过训练的模型 API 受到机器学习生命周期的许多方面的控制。 MLOps 的概念对于处理复杂的 ML 部署环境非常有益。 推荐&#xff1a;用 NSDT编辑器 快速搭建可编程3D场景 实施可靠的 MLOps 可以为投资机器学习的公司带来巨大收益。 了解要使用和…