当前位置: 首页 > news >正文

腾讯COS云存储入门

腾讯COS云存储入门

文章目录

  • 腾讯COS云存储入门
    • 一:前置准备
      • 1:涉及到的概念了解
      • 2:前置准备工作
    • 二:基本使用
      • 1:测试和准备
      • 2:具体开发说明
        • 2.1:初始化客户端
        • 2.2:完整入门demo

一:前置准备

1:涉及到的概念了解

名称描述
APPID开发者访问 COS 服务时拥有的用户维度唯一资源标识,用以标识资源,可在 API 密钥管理 页面获取。
SecretId开发者拥有的项目身份识别 ID,用于身份认证,可在 API 密钥管理 页面获取。
SecretKey开发者拥有的项目身份密钥,可在 API 密钥管理 页面获取。
Bucket存储桶,COS 中用于存储数据的容器。
BucketName-APPID存储桶名称格式,用户在使用 API、SDK 时,需要按照此格式填写存储桶名称。例如 examplebucket-1250000000,含义为该存储桶 examplebucket 归属于 APPID 为1250000000的用户。
Object对象,COS 中存储的具体文件,是存储的基本实体。
ObjectKey对象键,对象(Object)在存储桶(Bucket)中的唯一标识。
Region地域信息,枚举值可参见 可用地域 文档,例如:ap-beijing、ap-hongkong、eu-frankfurt 等。
ACL访问控制列表(Access Control List),是指特定 Bucket 或 Object 的访问控制信息列表。
CORS跨域资源共享指发起请求的资源所在域不同于该请求所指向资源所在的域的 HTTP 请求。
Multipart Uploads分块上传,腾讯云 COS 服务为上传文件提供的一种分块上传模式。
Object ContentObject Content 是上传文件的二进制内容。

2:前置准备工作

参见文档:https://cloud.tencent.com/document/api/436/7751

1️⃣ 登录到腾讯云[https://cloud.tencent.com]

在这里插入图片描述

2️⃣ 在腾讯云 对象存储控制台 开通腾讯云对象存储(COS)服务,开通就送免费的180天的,可以用于学习使用

在这里插入图片描述

3️⃣ 在对象存储控制台创建一个bucket

在这里插入图片描述

在这里插入图片描述

最后在确认配置这部看看配置有没有问题

在这里插入图片描述

4️⃣ 在API管理中创建APIkey和密码[https://console.cloud.tencent.com/cam/capi],注意保存secretkey文件

在这里插入图片描述

5️⃣ 下载cosbrower[https://cloud.tencent.com/document/product/436/11366],并通过上一步中拿到的secretID和secretkey进行登录

在这里插入图片描述

在这里插入图片描述

二:基本使用

这里以Java为例,其他的语言见文档,其实都差不多,文档写的很详细了

https://cloud.tencent.com/document/product/436/10199

1:测试和准备

1️⃣ 先测试一下自己和cos服务通不通

在这里插入图片描述

2️⃣ 在你的项目中引入如下maven依赖

<dependency><groupId>com.qcloud</groupId><artifactId>cos_api</artifactId><version>5.6.227</version>
</dependency>

2:具体开发说明

2.1:初始化客户端

分为使用临时的秘钥(安全,需要使用工具生成)和永久秘钥(可能有暴露的风险,一定要最小权限指引)

由于是学习部分,这里直接使用永久秘钥进行演示,临时秘钥生成简单介绍

临时秘钥的获取(https://cloud.tencent.com/document/product/1312/48195)

2.2:完整入门demo
package com.example.demo;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.exception.CosClientException;
import com.qcloud.cos.http.HttpProtocol;
import com.qcloud.cos.model.*;
import com.qcloud.cos.region.Region;
import lombok.extern.slf4j.Slf4j;import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;@Slf4j
public class CosTest {public static void main(String[] args) {String bucketName = "cuihaida-1258741528";String key = "folder/222.png";COSClient cosClient = CosTest.getCosClient();CosTest.getBucketList(cosClient);CosTest.uploadFile(cosClient, bucketName, key, "/Users/cuihaida/project/java/first/demo/src/main/java/com/example/demo/111.png");CosTest.getBucketList(cosClient);// CosTest.deleteObject(cosClient, bucketName, key);CosTest.downLoadObject(cosClient, bucketName, key, "333.png");}/*** 获取 COS 客户端* @return COSClient*/public static COSClient getCosClient() {// 1 初始化用户身份信息(secretId, secretKey)。// SECRETID 和 SECRETKEY 请登录访问管理控制台 https://console.cloud.tencent.com/cam/capi 进行查看和管理String secretId = "AKI...."; //用户的 SecretId,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140String secretKey = "....";//用户的 SecretKey,建议使用子账号密钥,授权遵循最小权限指引,降低使用风险。子账号密钥获取可参见 https://cloud.tencent.com/document/product/598/37140COSCredentials cred = new BasicCOSCredentials(secretId, secretKey);// 2 设置 bucket 的地域, COS 地域的简称请参见 https://cloud.tencent.com/document/product/436/6224// ap-beijing, ap-hangzhou...// clientConfig 中包含了设置 region, https(默认 http), 超时, 代理等 set 方法, 使用可参见源码或者常见问题 Java SDK 部分。Region region = new Region("ap-beijing");ClientConfig clientConfig = new ClientConfig(region);// 这里建议设置使用 https 协议// 从 5.6.54 版本开始,默认使用了 httpsclientConfig.setHttpProtocol(HttpProtocol.https);// 3 生成 cos 客户端。return new COSClient(cred, clientConfig);}/*** 创建存储桶* @param cosClient cos 客户端* @param bucketName 存储桶名称*/public static void createBucket(COSClient cosClient, String bucketName) {CreateBucketRequest createBucketRequest = new CreateBucketRequest(bucketName);// 设置 bucket 的权限为 Private(私有读写)、其他可选有 PublicRead(公有读私有写)、PublicReadWrite(公有读写)createBucketRequest.setCannedAcl(CannedAccessControlList.Private);try{Bucket bucketResult = cosClient.createBucket(createBucketRequest);log.info("创建存储桶成功: {}", bucketResult.getName());} catch (CosClientException clientException) {log.error("创建存储桶失败: {}", clientException.getMessage());}}/*** 获取存储桶列表** @param cosClient cos 客户端*/public static void getBucketList(COSClient cosClient) {try {List<Bucket> buckets = cosClient.listBuckets();for (Bucket bucket : buckets) {log.info(" - {}\t{}\t{}\t{}\t{}\t{}",bucket.getName(),bucket.getLocation(),bucket.getCreationDate(),bucket.getOwner().getDisplayName(),bucket.getOwner().getId(),bucket.getBucketType());}} catch (CosClientException clientException) {log.error("获取存储桶列表失败: {}", clientException.getMessage());}}/*** 上传文件* @param cosClient cos 客户端* @param bucketName 存储桶名称* @param key 文件名称* @param localFilePath 本地文件路径*/public static void uploadFile(COSClient cosClient, String bucketName, String key, String localFilePath) {File localFile = new File(localFilePath);try {PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, key, localFile);PutObjectResult putObjectResult = cosClient.putObject(putObjectRequest);log.info("上传文件成功: {}", putObjectResult);} catch (CosClientException clientException) {log.error("上传文件失败: {}", clientException.getMessage());}}/*** 获取文件列表* @param cosClient cos 客户端* @param bucketName 存储桶名称* @param prefix 表示列出的 object 的 key 以 prefix 开始* @param delimiter 表示分隔符, 设置为/表示列出当前目录下的 object, 设置为空表示列出所有的 object* @param maxKeyNumber 最多列举多少个对象, 一次 listobject 最大支持1000* @return 文件列表*/public static List<ObjectListing> getObjectList(COSClient cosClient, String bucketName, String prefix, String delimiter, int maxKeyNumber) {// 设置ListObjectsRequestListObjectsRequest listObjectsRequest = new ListObjectsRequest();listObjectsRequest.setBucketName(bucketName);listObjectsRequest.setPrefix(prefix);listObjectsRequest.setDelimiter(delimiter);listObjectsRequest.setMaxKeys(maxKeyNumber);ObjectListing objectListing = null;List<ObjectListing> objectListingList = new ArrayList<>();do {try {objectListing = cosClient.listObjects(listObjectsRequest);getInfoOfFileListString(objectListing);objectListingList.add(objectListing);} catch (CosClientException clientException) {log.error("获取文件列表失败: {}", clientException.getMessage());}} while (Objects.requireNonNull(objectListing).isTruncated());return objectListingList;}/*** 下载文件* @param cosClient cos 客户端* @param bucketName 存储桶名称* @param key 文件名称* @param localFilePath 本地文件路径* @return 文件元数据*/public static ObjectMetadata downLoadObject(COSClient cosClient, String bucketName, String key, String localFilePath) {try {// 创建 GetObjectRequestGetObjectRequest getObjectRequest = new GetObjectRequest(bucketName, key);// 下载文件ObjectMetadata objectMetadata = cosClient.getObject(getObjectRequest, new File(localFilePath));log.info("下载文件成功: {}", objectMetadata);return objectMetadata;} catch (CosClientException clientException) {log.error("下载文件失败: {}", clientException.getMessage());return null;}}/*** 删除文件* @param cosClient cos 客户端* @param bucketName 存储桶名称* @param key 文件名称*/public static void deleteObject(COSClient cosClient, String bucketName, String key) {try {cosClient.deleteObject(bucketName, key);log.info("删除文件成功: {}", key);} catch (CosClientException clientException) {log.error("删除文件失败: {}", clientException.getMessage());}}/*** 获取文件列表信息* @param objectListing 文件列表*/private static void getInfoOfFileListString(ObjectListing objectListing) {// common prefix 表示被 delimiter 截断的路径, 如 delimter 设置为/, common prefix 则表示所有子目录的路径List<String> commonPrefixs = objectListing.getCommonPrefixes();for (String commonPrefix : commonPrefixs) {log.info(" - commonPrefix: {}", commonPrefix);}// object summary 表示所有列出的 object 列表List<COSObjectSummary> cosObjectSummaries = objectListing.getObjectSummaries();for (COSObjectSummary cosObjectSummary : cosObjectSummaries) {// 文件的路径 keyString key = cosObjectSummary.getKey();// 文件的 etagString etag = cosObjectSummary.getETag();// 文件的长度long fileSize = cosObjectSummary.getSize();// 文件的存储类型String storageClasses = cosObjectSummary.getStorageClass();log.info(" - key: {} etag: {} size: {} storageClass: {}", key, etag, fileSize, storageClasses);}}
}

在这里插入图片描述

http://www.dtcms.com/a/322989.html

相关文章:

  • 笔试——Day33
  • 基于遗传优化的稀疏线阵最优排布算法matlab仿真
  • Java面向对象编程(OOP)全面解析:从基础到实践
  • 关于城市农村创业的一点构想
  • 自动生成视频的AI大模型高效创作指南
  • mac安装node.js
  • 【GPT入门】第41课 Model Scope在线平台部署Llama3
  • Serper注册无反应
  • Numpy基础(通用函数)
  • 游游的数组染色
  • 洛谷 滑动窗口 /【模板】单调队列
  • 揭秘MyBatis核心类MappedStatement
  • Java异常:认识异常、异常的作用、自定义异常
  • ChatGPT 5的编程能力宣传言过其实
  • 97-基于Python的大众点评数据分析预测系统
  • 七、《Serverless架构:按毫秒计费的成本革命》--从新浪AI推理平台50%效能提升看无服务器本质
  • 数据结构——优先级队列(PriorityQueue):一文解决 Top K 问题!
  • 可视化大屏 SDK 数据结构设计:从拖拽组件到最终渲染的全链路
  • 2025-08-09 李沐深度学习13——经典卷积神经网络 (1)
  • 嵌入式知识日常问题记录及用法总结(一)
  • C++2024 年一级
  • Vue3 学习教程,从入门到精通,Vue 3 + Tailwind CSS 全面知识点与案例详解(31)
  • buuctf:inndy_echo、actf_2019_babystack
  • 花生4CL基因家族鉴定及对干旱与盐胁迫响应分析--文献精读157
  • 【AI论文】种子扩散模型:一种具备高速推理能力的大规模扩散语言模型
  • 智慧农业-无人机视角庄稼倒伏农作物倒伏识别分割数据集labelme格式541张1类别
  • C语言指针完全指南:从入门到精通
  • Selenium使用超全指南
  • OpenCV图像裁剪与 ROI 操作
  • 全志刷机工具:PhoenixSuit-全志芯片处理器-刷机工具安装包及最详细使用教程指南