使用Golang调用腾讯云对象存储(COS)

文章目录

  • 一、腾讯云COS对象存储创建
    • 1.1 创建存储桶
    • 2.1 存储桶测试
  • 二、使用Golang调用腾讯云对象存储(COS)
    • 2.1 安装COS SDK
    • 2.2 初始化COS客户端
    • 2.3 上传文件
    • 2.4 下载文件
    • 2.5 列出存储桶中的对象
    • 2.6 整体代码示例

本文档介绍如何使用Golang调用腾讯云对象存储(COS),包括初始化客户端、上传文件和下载文件。

一、腾讯云COS对象存储创建

1.1 创建存储桶

  1. 我们需要创建一个用于存放对象的存储桶:

  2. 在 对象存储控制台 左侧导航栏中单击存储桶列表,进入存储桶管理页。

  3. 单击创建存储桶,输入以下配置信息,其他配置保持默认即可。

名称:输入存储桶名称。名称设置后不可修改。此处举例输入 exampleobjext 。所属地域:存储桶所属地域,选择与您业务最近的一个地区,例如香港地域。访问权限:存储桶访问权限,此处我们保持默认为“私有读写”。单击确定,即可创建完成。

2.1 存储桶测试

  • 上传对象

从本地选择文件上传到存储桶:

  1. 单击存储桶名称,进入存储桶列表页。

  2. 选择上传文件 > 选择文件,选择需要上传至存储桶的文件,例如文件名为 exampleobjext.txt 的文件。

  3. 单击上传,即可将文件 exampleobjext.txt 上传至存储桶。

  • 下载对象

将云上数据下载到本地:

1.单击文件 exampleobjext.txt 右侧的详情,进入对象属性页。

2.在基本信息配置项中,单击下载对象即可下载,或单击复制临时链接,将链接粘贴至浏览器地址栏并回车,即可下载该对象。

  • 删除对象

将云上对象数据删除:

  1. 在左侧导航栏中,单击【存储桶列表】,进入存储桶列表页面。

  2. 找到对象所在的存储桶,单击其存储桶名称,进入存储桶管理页面。

  3. 在左侧导航栏中,选择【文件列表】,进入文件列表页面。

  4. 勾选需要删除的对象,单击上方的【更多操作】>【删除】。

二、使用Golang调用腾讯云对象存储(COS)

2.1 安装COS SDK

go get -u github.com/tencentyun/cos-go-sdk-v5

2.2 初始化COS客户端

package mainimport ("context""fmt""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url"
)func initCOSClient(bucketName, region, secretID, secretKey string) *cos.Client {u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucketName, region))b := &cos.BaseURL{BucketURL: u}return cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID:  secretID,SecretKey: secretKey,},})
}func main() {client := initCOSClient("<your-bucket-name>", "<region>", "<your-secret-id>", "<your-secret-key>")fmt.Println("COS client initialized successfully.")
}

2.3 上传文件

下面的函数用于将本地文件上传到COS。

  • 上传文件方法
func uploadFile(client *cos.Client, localFilePath, remoteFilePath string) error {fmt.Printf("Uploading file from %s to %s\n", localFilePath, remoteFilePath)f, err := os.Open(localFilePath)if err != nil {return fmt.Errorf("opening file: %v", err)}defer f.Close()_, err = client.Object.Put(context.Background(), remoteFilePath, f, nil)if err != nil {return fmt.Errorf("uploading file: %v", err)}return nil
}
  • 方法调用示例
func main() {client := initCOSClient("<your-bucket-name>", "<region>", "<your-secret-id>", "<your-secret-key>")localUploadPath := "local/path/to/example.txt"remoteUploadPath := "remote/path/to/example.txt"err := uploadFile(client, localUploadPath, remoteUploadPath)if err != nil {fmt.Println("Error uploading file:", err)} else {fmt.Println("File uploaded successfully.")}
}

2.4 下载文件

下面的函数用于从COS下载文件并保存到本地。

  • 下载文件方法
func downloadFile(client *cos.Client, remoteFilePath, localFilePath string) error {fmt.Printf("Downloading file from %s to %s\n", remoteFilePath, localFilePath)// 确保目录存在dir := filepath.Dir(localFilePath)if err := os.MkdirAll(dir, 0755); err != nil {return fmt.Errorf("creating directories: %v", err)}resp, err := client.Object.Get(context.Background(), remoteFilePath, nil)if err != nil {return fmt.Errorf("downloading file: %v", err)}defer resp.Body.Close()localFile, err := os.Create(localFilePath)if err != nil {return fmt.Errorf("creating file: %v", err)}defer localFile.Close()_, err = localFile.ReadFrom(resp.Body)if err != nil {return fmt.Errorf("writing to file: %v", err)}return nil
}
  • 方法调用示例
func main() {client := initCOSClient("<your-bucket-name>", "<region>", "<your-secret-id>", "<your-secret-key>")localDownloadPath := "local/path/to/downloaded_example.txt"remoteDownloadPath := "remote/path/to/example.txt"err := downloadFile(client, remoteDownloadPath, localDownloadPath)if err != nil {fmt.Println("Error downloading file:", err)} else {fmt.Println("File downloaded successfully.")}
}

2.5 列出存储桶中的对象

有时候我们可能需要列出存储桶中的对象以确认文件是否存在。

func listObjects(client *cos.Client, prefix string) error {opt := &cos.BucketGetOptions{Prefix: prefix,}v, _, err := client.Bucket.Get(context.Background(), opt)if err != nil {return fmt.Errorf("listing objects: %v", err)}for _, c := range v.Contents {fmt.Println(c.Key)}return nil
}func main() {client := initCOSClient("<your-bucket-name>", "<region>", "<your-secret-id>", "<your-secret-key>")// 列出存储桶中的对象err := listObjects(client, "remote/path/to/")if err != nil {fmt.Println("Error listing objects:", err)}
}

2.6 整体代码示例

package mainimport ("context""fmt""github.com/tencentyun/cos-go-sdk-v5""net/http""net/url""os""path/filepath"
)func main() {// 初始化COS客户端client := initCOSClient("<your-bucket-name>", "<region>", "<your-secret-id>", "<your-secret-key>")// 上传文件localUploadPath := "local/path/to/example.txt"remoteUploadPath := "remote/path/to/example.txt"err := uploadFile(client, localUploadPath, remoteUploadPath)if err != nil {fmt.Println("Error uploading file:", err)} else {fmt.Println("File uploaded successfully.")}// 下载文件localDownloadPath := "local/path/to/downloaded_example.txt"remoteDownloadPath := "remote/path/to/example.txt"err = downloadFile(client, remoteDownloadPath, localDownloadPath)if err != nil {fmt.Println("Error downloading file:", err)} else {fmt.Println("File downloaded successfully.")}// 列出存储桶中的对象err = listObjects(client, "remote/path/to/")if err != nil {fmt.Println("Error listing objects:", err)}
}// 初始化COS客户端
func initCOSClient(bucketName, region, secretID, secretKey string) *cos.Client {u, _ := url.Parse(fmt.Sprintf("https://%s.cos.%s.myqcloud.com", bucketName, region))b := &cos.BaseURL{BucketURL: u}return cos.NewClient(b, &http.Client{Transport: &cos.AuthorizationTransport{SecretID:  secretID,SecretKey: secretKey,},})
}// 上传文件
func uploadFile(client *cos.Client, localFilePath, remoteFilePath string) error {fmt.Printf("Uploading file from %s to %s\n", localFilePath, remoteFilePath)f, err := os.Open(localFilePath)if err != nil {return fmt.Errorf("opening file: %v", err)}defer f.Close()_, err = client.Object.Put(context.Background(), remoteFilePath, f, nil)if err != nil {return fmt.Errorf("uploading file: %v", err)}return nil
}// 下载文件
func downloadFile(client *cos.Client, remoteFilePath, localFilePath string) error {fmt.Printf("Downloading file from %s to %s\n", remoteFilePath, localFilePath)// 确保目录存在dir := filepath.Dir(localFilePath)if err := os.MkdirAll(dir, 0755); err != nil {return fmt.Errorf("creating directories: %v", err)}resp, err := client.Object.Get(context.Background(), remoteFilePath, nil)if err != nil {return fmt.Errorf("downloading file: %v", err)}defer resp.Body.Close()localFile, err := os.Create(localFilePath)if err != nil {return fmt.Errorf("creating file: %v", err)}defer localFile.Close()_, err = localFile.ReadFrom(resp.Body)if err != nil {return fmt.Errorf("writing to file: %v", err)}return nil
}// 列出存储桶中的对象
func listObjects(client *cos.Client, prefix string) error {opt := &cos.BucketGetOptions{Prefix: prefix,}v, _, err := client.Bucket.Get(context.Background(), opt)if err != nil {return fmt.Errorf("listing objects: %v", err)}for _, c := range v.Contents {fmt.Println(c.Key)}return nil
}

参考文档:

  • 腾讯云对象存储创建文档:https://cloud.tencent.com/document/product/436/14106
  • 腾讯云对象存储golang-SDK:https://cloud.tencent.com/document/product/436/31215
  • 腾讯云对象存储常见问题:https://cloud.tencent.com/document/product/436/30748

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

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

相关文章

正在直播:Microsoft Copilot Studio 新增支持Copilot代理、Copilot扩展等多项功能

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

java连接ldap实现查询

文章目录 一、项目背景二、准备工作三、验证结果四、易错点讲解易错点1&#xff1a;java: 无法访问org.springframework.ldap.core.LdapTemplate易错点2&#xff1a;java: 无法访问org.springframework.context.ConfigurableApplicationContext易错点3&#xff1a;[LDAP: error…

思科、华为、华三、Juniper路由协议优先级汇总

Part1思科路由协议管理距离默认值 路由来源默认值已连接的接口0静态路由1增强型内部网关路由协议 (EIGRP) 汇总路由5外部边界网关协议 (BGP)20内部 EIGRP90IGRP100OSPF110IS-IS&#xff08;中间系统到中间系统&#xff09;115路由信息协议 (RIP)120Exterior Gateway Protocol …

Python——字典数据存入excel

# 字典结果写入excel表保存 df pd.DataFrame(my_dict) # dict转DataFrame result_excel df.T # 转置 print(result_excel) result_excel.to_excel(save_path) # 写入excel

C++:STL—算法

C:STL—算法 算法 算法 STL&#xff08;Standard Template Library&#xff09;中的算法是为了操作数据集合&#xff08;如容器&#xff09;而设计的函数模板集合&#xff0c;它们提供了丰富的功能和灵活的接口&#xff0c;可以用于对数据进行排序、查找、遍历等操作。STL中的…

STM32 学习——1. STM32最小系统

这是一个最小系统的测试&#xff0c;LED灯会进行闪烁。选用PC13口&#xff0c;因为STM32F103C8T6 硬件开发板中&#xff0c;这个端口是一个LED 1. proteus8.15 原理图 2. cubemx 新建工程 3. keil 代码 while (1){HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin);HAL_Delay(100);…

WGCAT工单系统如何配置通知

WGCAT工单系统可以配置邮件通知 只要配置了邮件通知&#xff0c;那么一旦我们账号有新的工单需要处理&#xff0c;就会接受到邮件通知 除了邮件之外&#xff0c;还可以配置其他方式的通知&#xff0c;比如微信钉钉短信等方式&#xff0c;参考如下 https://www.wgstart.com/wgc…

机器学习(五) -- 监督学习(5) -- 线性回归1

系列文章目录及链接 上篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;4&#xff09; -- 集成学习方法 - 随机森林 下篇&#xff1a;机器学习&#xff08;五&#xff09; -- 监督学习&#xff08;5&#xff09; -- 线性回归2 前言 tips&#xff1…

Jmeter例题分析-作业一

作业 作业1概要 本文档是关于执行软件性能测试的详细指南&#xff0c;包括使用JMeter工具进行测试的步骤和要求。 文档分为两个主要部分&#xff1a;性能测试的执行和性能测试报告的编写。 在第一部分中&#xff0c;详细描述了如何使用 JMeter进行性能测试。这包括设置测试环…

PyTorchLightning集成SwanLab进行训练监控与可视化

文档&#xff1a;https://docs.swanlab.cn/zh/guide_cloud/integration/integration-pytorch-lightning.html PyTorch Lightning是一个开源的机器学习库&#xff0c;它建立在 PyTorch 之上&#xff0c;旨在帮助研究人员和开发者更加方便地进行深度学习模型的研发。Lightning 的…

力扣刷题---961. 在长度 2N 的数组中找出重复 N 次的元素【简单】

题目描述&#x1f357; 给你一个整数数组 nums &#xff0c;该数组具有以下属性&#xff1a; nums.length 2 * n. nums 包含 n 1 个 不同的 元素 nums 中恰有一个元素重复 n 次 找出并返回重复了 n 次的那个元素。 示例 1&#xff1a; 输入&#xff1a;nums [1,2,3,3] 输…

树形dp(学习过程+刷题总结)

树形 d p &#xff08;学习过程 刷题总结&#xff09; \Huge{树形dp&#xff08;学习过程刷题总结&#xff09;} 树形dp&#xff08;学习过程刷题总结&#xff09; 文章目录 写在前面基本的dp方程选择节点类树形背包类 例题练习已练习未练习 写在前面 花了几天时间学了一下树…

leetcode每日一题第八十九天

class Solution { public:int subarraySum(vector<int>& nums, int k) {unordered_map<int,int> mp;mp[0] 1;int count 0,pre 0;for(auto x:nums){pre x;if(mp.find(pre-k) ! mp.end()){count mp[pre-k];}mp[pre];}return count;} };

【LVGL_Linux安装NXP的Gui-Guider】

GUI Guider是恩智浦为LVGL开发了一个上位机GUI设计工具&#xff0c;可以通过拖放控件的方式设计LVGL GUI页面&#xff0c;加速GUI的设计。 虽然他只支持自家芯片&#xff0c;但是应用层我们可以直接拿来用作其他MCU上。 GUI-Guider 下载 NXP官网下载&#xff1a;链接&#xff1…

无界鼠标与键盘,如何轻松控制多台电脑

简介 在软件开发领域&#xff0c;高效地管理多台电脑是至关重要的。Mouse without Borders软件为开发人员提供了一种便捷的解决方案&#xff0c;使他们能够轻松地在多台电脑之间共享鼠标和键盘。不仅如此&#xff0c;Mouse without Borders还提供了许多高级功能&#xff0c;如…

Android 12系统源码_多窗口模式(二)系统实现分屏的功能原理

前言 上一篇我们具体分析了系统处于多窗口模式下&#xff0c;Android应用和多窗口模式相关方法的调用顺序&#xff0c;对于应用如何适配多窗口模式有了一个初步的认识&#xff0c;本篇文章我们将会结合Android12系统源码&#xff0c;具体来梳理一下系统是如何触发多窗口分屏模…

SpringBoot 热插拔AOP,动态的实现AOP【简单易懂,有大用】

B站学习地址 文章目录 一、理论二、核心代码2-1、自定义操作类型枚举2-2、自定义 Advisor2-3、动态添加/删除advisor 工具类2-4、提供测试的 Controller 三、测试3-1、自定义注解3-2、自定义拦截器3-3、测试 四、源码获取 前段时间在学习sentinel和dubbo的时候&#xff0c;很好…

HarmonyOS 鸿蒙应用开发 - 多态样式 stateStyles

前言&#xff1a;Styles和Extend仅仅应用于静态页面的样式复用&#xff0c;stateStyles可以依据组件的内部状态的不同&#xff0c;快速设置不同样式&#xff0c;类似于css伪类&#xff0c;但语法不同。 ArkUI提供以下四种状态&#xff1a; focused&#xff1a;获焦态。normal&…

请解释Java Web应用的开发流程,包括前后端分离和交互方式。请解释Java中的锁分离技术,并讨论其在提高并发性能方面的作用。

请解释Java Web应用的开发流程&#xff0c;包括前后端分离和交互方式。 Java Web应用的开发流程通常包括多个阶段&#xff0c;这些阶段涵盖了从需求分析到部署和维护的全过程。同时&#xff0c;随着技术的发展&#xff0c;前后端分离已经成为了现代Web应用开发的一种主流方式。…

请解释Java Web中的Filter过滤器的作用和常见应用场景。什么是Java Web中的Servlet API?请列举其核心接口和类。

请解释Java Web中的Filter过滤器的作用和常见应用场景。 在Java Web开发中&#xff0c;Filter&#xff08;过滤器&#xff09;是一个非常重要的组件&#xff0c;它位于客户端与服务器端之间&#xff0c;用于拦截客户端发送到服务器的请求&#xff0c;或者在服务器将响应返回给…