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

简介

对象存储(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: trueduration: 1800bucket: gamioo-1258024122region: ap-shanghaisecretId: **********************************secretKey: *********************************endpoint: https://gamioo-1258024122.cos.ap-shanghai.myqcloud.com

配置初始化:

  /*** 获取联合身份临时访问凭证*/public Response reloadCredential() {TreeMap<String, Object> config = new TreeMap<>();// 云 api 密钥 SecretIdconfig.put("secretId", cosProperties.getSecretId());// 云 api 密钥 SecretKeyconfig.put("secretKey", cosProperties.getSecretKey());// 设置域名,可通过此方式设置内网域名//config.put("host", "sts.internal.tencentcloudapi.com");// 临时密钥有效时长,单位是秒config.put("durationSeconds", cosProperties.getDuration());// 换成你的 bucketconfig.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/31923String[] 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;}

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

    /*** 获取联合身份临时访问凭证*/@Overridepublic 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 {@Resourceprivate 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简介和如何接入
COS API 授权策略使用指引

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

论文笔记:从不平衡数据流中学习的综述: 分类、挑战、实证研究和可重复的实验框架

0 摘要 论文&#xff1a;A survey on learning from imbalanced data streams: taxonomy, challenges, empirical study, and reproducible experimental framework 发表&#xff1a;2023年发表在Machine Learning上。 源代码&#xff1a;https://github.com/canoalberto/imba…

Python Qt(七)Listview

源代码&#xff1a; # -*- coding: utf-8 -*-# Form implementation generated from reading ui file qt_listview.ui # # Created by: PyQt5 UI code generator 5.15.9 # # WARNING: Any manual changes made to this file will be lost when pyuic5 is # run again. Do not…

Docker之私有仓库 RegistryHarbor

目录 一、Docker私有仓库&#xff08;Registry&#xff09; 1.1 Registry的介绍 二、搭建本地私有仓库 2.1首先下载 registry 镜像 2.2在 daemon.json 文件中添加私有镜像仓库地址 2.3运行 registry 容器 2.4Docker容器的重启策略 2.5为镜像打标签 2.6上传到私有仓库 2…

jvm的内存区域

JVM 内存分为线程私有区和线程共享区&#xff0c;其中方法区和堆是线程共享区&#xff0c;虚拟机栈、本地方法栈和程序计数器是线程隔离的数据区。 1&#xff09;程序计数器 程序计数器&#xff08;Program Counter Register&#xff09;也被称为 PC 寄存器&#xff0c;是一块…

基于Echarts的大数据可视化模板:大数据医疗服务平台

目录 引言大数据在医疗领域的应用ECharts在医疗服务中的作用医疗大数据的应用方向临床决策支持药物研发与安全性监测健康管理与预防流行病监测与公共卫生基因组学与个性化医疗医疗保险与费用管理Echarts与大数据可视化Echarts库以及其在大数据可视化领域的应用优势开发过程和所…

只考一门数据结构,计算机学硕复录比1:1的山东双非学校考情分析

青岛理工大学 考研难度&#xff08;☆&#xff09; 内容&#xff1a;23考情概况&#xff08;拟录取和复试分析&#xff09;、院校概况、23专业目录、23复试详情、各专业考情分析、各科目考情分析。 正文1420字&#xff0c;预计阅读&#xff1a;3分钟 2023考情概况 青岛理工…

redis缓存雪崩、穿透、击穿解决方案

redis缓存雪崩、穿透、击穿解决方案 背景缓存雪崩缓存击穿缓存穿透总结背景 关于缓存异常,我们常见的有三个问题:缓存雪崩、缓存击穿、缓存穿透。这三个问题一旦发生,会导致大量请求直接落到数据库层面。如果请求的并发量很大,会影响数据库的运行,严重的会导致数据库宕机…

openGauss学习笔记-54 openGauss 高级特性-MOT

文章目录 openGauss学习笔记-54 openGauss 高级特性-MOT54.1 MOT特性及价值54.2 MOT关键技术54.3 MOT应用场景54.4 不支持的数据类型54.5 使用MOT54.6 将磁盘表转换为MOT openGauss学习笔记-54 openGauss 高级特性-MOT openGauss引入了MOT&#xff08;Memory-Optimized Table&…

如何高效地设计测试用例并评审

编写出好的测试用例是每一个测试工程师的职责&#xff0c;但在实际工作中大家写的测试用例往往需要不断地修改才能使用&#xff0c;这不仅浪费了时间&#xff0c;还容易让测试工程师产生自我否定的情绪&#xff0c;甚至在团队中产生各种矛盾。 那如何高效地设计测试用例呢&…

可直接运营的餐饮外卖点餐自提单多门店小程序开发演示

适合鲜花店、蛋糕店、奶茶店、餐饮店、便利店等门店商家的小程序。 小程序系统支持外卖和自提两种模式&#xff0c;帮助商家打造自己的私域流量池&#xff0c;减少对美团和饿了么的依赖&#xff0c;提升用户点餐、就餐体验。 支持会员签到获取积分的功能&#xff0c;积分可用…

jwt安全问题

文章目录 jwt安全问题jwt简介jwt组成headerpayloadsignature 潜在漏洞空加密算法web346 密钥爆破web348 敏感信息泄露web349 **修改算法RS256为HS256**web350 jwt安全问题 jwt简介 JWT的全称是Json Web Token&#xff0c;遵循JSON格式&#xff0c;跨域认证解决方案&#xff0…

【93】PCI Expansion ROM

1、Expansion ROM PCIe、PCI设备可以提供Expansion ROM&#xff0c;Expansion ROM中存在设备初始化或者system boot的code。SystemBIOS在POST&#xff08;Power-on Self Test&#xff09;阶段&#xff0c;会枚举PCI设备&#xff0c;并判断有设备是否支持Expansion ROM&#xff…

Python爬虫武汉市二手房价格数据采集分析:Linear Regression、XGBoost和LightGBM|代码分享...

全文链接&#xff1a;http://tecdat.cn/?p31958 分析师&#xff1a;Yan Liu 我国有大量的资金都流入了房地产行业&#xff0c;同时与其他行业有着千丝万缕的联系&#xff0c;可以说房地产行业对推动我国深化改革、经济发展、工业化和城市化具有不可磨灭的作用&#xff08;点击…

WebSocket详解以及应用

&#x1f61c;作 者&#xff1a;是江迪呀✒️本文关键词&#xff1a;websocket、网络、长连接、前端☀️每日 一言&#xff1a;任何一个你不喜欢而又离不开的地方&#xff0c;任何一种你不喜欢而又无法摆脱的生活&#xff0c;都是监狱&#xff01; 一、前言 我们在…

基于Spring Gateway路由判断器实现各种灰度发布场景

文章目录 1、灰度发布实现1.1 按随机用户的流量百分比实现灰度1.2 按人群划分实现的灰度1.2.1 通过Header信息实现灰度1.2.2 通过Query信息实现灰度1.2.3 通过RemoteAdd判断来源IP实现灰度 2、路由判断器2.1. After2.2. Before2.3. Between2.4. Cookie2.5. Header2.6. Host2.7.…

GEE/PIE遥感大数据处理与典型案例丨数据整合Reduce、云端数据可视化、数据导入导出及资产管理、机器学习算法等

目录 ​专题一&#xff1a;初识GEE和PIE遥感云平台 专题二&#xff1a;GEE和PIE影像大数据处理基础 专题三&#xff1a;数据整合Reduce 专题四&#xff1a;云端数据可视化 专题五&#xff1a;数据导入导出及资产管理 专题六&#xff1a;机器学习算法 专题七&#xff1a;…

2023-8-30 Dijkstra 求最短路(一)

题目链接&#xff1a;Dijkstra求最短路 I #include <iostream> #include <cstring> #include <algorithm>using namespace std;const int N 510;int n, m; int g[N][N]; int dist[N]; bool st[N];int dijkstra() {memset(dist, 0x3f, sizeof dist);dist[1…

Leetcode每日一题:1448. 统计二叉树中好节点的数目

原题 给你一棵根为 root 的二叉树&#xff0c;请你返回二叉树中好节点的数目。 「好节点」X 定义为&#xff1a;从根到该节点 X 所经过的节点中&#xff0c;没有任何节点的值大于 X 的值。 示例 1&#xff1a; 输入&#xff1a;root [3,1,4,3,null,1,5] 输出&#xff1a;4 解…

C语言网络编程:实现自己的高性能网络框架

一般生产环境中最耗时的其实是业务逻辑处理。所以&#xff0c;是不是可以将处理业务逻辑的代码给拆出来丢到线程池中去执行。 比如像下面这样&#xff1a; ​我们事先创建好一堆worker线程&#xff0c;主线程accepter拿到一个连接上来的套接字&#xff0c;就从线程池中取出一个…

开始MySQL之路——MySQL的DataGrip图形化界面

下载DataGrip 下载地址&#xff1a;Download DataGrip: Cross-Platform IDE for Databases & SQL 安装DataGrip 准备好一个文件夹&#xff0c;不要中文和空格 C:\Develop\DataGrip 激活DataGrip 激活码&#xff1a; VPQ9LWBJ0Z-eyJsaWNlbnNlSWQiOiJWUFE5TFdCSjBaIiwibGl…