1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > 腾讯云-对象存储服务(COS)的使用总结

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

时间:2024-03-21 08:44:13

相关推荐

腾讯云-对象存储服务(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的优点如下:

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

使用

访问管理

腾讯云 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-

配置初始化:

/*** 获取联合身份临时访问凭证*/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.");// 临时密钥有效时长,单位是秒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[]{"*"});// 密钥的权限列表。简单上传和分片需要以下的权限,其他权限列表请看 /document/product/436/31923String[] allowActions = new String[]{//简单上传操作"name/cos:PutObject",//表单上传对象"name/cos:PostObject",//获取对象"name/cos:GetBucket",//分块上传:初始化分块操作"name/cos:InitiateMultipartUpload",//分块上传:List 进行中的分块上传"name/cos:ListMultipartUploads",//分块上传:List 已上传分块操作"name/cos:ListParts",//分块上传:上传分块操作"name/cos:UploadPart",//分块上传:完成所有分块上传操作"name/cos:CompleteMultipartUpload",//取消分块上传操作"name/cos:AbortMultipartUpload",//检索存储桶及其权限"name/cos:HeadBucket",//删除对象"name/cos:DeleteBucket",};config.put("allowActions", allowActions);Response response = null;try {response = CosStsClient.getCredential(config);} catch (Exception e) {logger.error(e.getMessage(), e);}return response;}

其中,请求参数说明:

返回值说明

{"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":"-08-23T04:14:35Z","expiredTime":1692764075,"requestId":"ea06d01d-772a-491e-b736-1d1e55d64d08","startTime":1692762275}

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

@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() / 1000);String message = JSON.toJSONString(response);logger.info("key:{},duration:{} seconds,response:{}", key, duration, message);redisService.setExpire(key, message, 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 授权策略使用指引

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。