go操作aws s3

v2

官方推荐版本,需要go版本>=1.20

安装

go get github.com/aws/aws-sdk-go-v2
go get github.com/aws/aws-sdk-go-v2/config
go get github.com/aws/aws-sdk-go-v2/service/s3

必要参数

bucket: 存储桶的名称

Region: 存储桶所在区域,例us-east-1

accessKeyID: 访问存储桶所需的KeyID

secretAccessKey: 访问存储桶所需的AccessKey

如何获取accessKeyIDsecretAccessKey:指南

var (s3Client *s3.Clientbucket   = "yourbucketname"
)func InitS3Client() {accessKeyID := "xxxxx"secretAccessKey := "xxxxx"cfg, err := config.LoadDefaultConfig(context.TODO(),config.WithRegion("us-east-1"),config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(accessKeyID, secretAccessKey, "")),)if err != nil {log.Fatalf("unable to load SDK config, %v", err)}s3Client = s3.NewFromConfig(cfg)
}func UploadToS3(filePath, fileName, mimeType string) (string, error) {file, err := os.Open(filePath)if err != nil {return "", fmt.Errorf("failed to open file %q, %v", filePath, err)}defer file.Close()_, err = s3Client.PutObject(context.TODO(), &s3.PutObjectInput{Bucket:      aws.String(bucket),Key:         aws.String(fileName),Body:        file,ContentType: aws.String(mimeType),})if err != nil {return "", fmt.Errorf("failed to upload file to S3, %v", err)}return fmt.Sprintf("https://%s.s3.amazonaws.com/%s", bucket, fileName), nil
}

若不想升级go1.20,可以使用v1版本

v1

安装

go get github.com/aws/aws-sdk-go
var (s3Client *s3.S3bucket   = "yourbucketname"
)func InitS3Client() {accessKeyID := "xxxxx"secretAccessKey := "xxxxx"sess, err := session.NewSession(&aws.Config{Region:      aws.String("us-east-1"),Credentials: credentials.NewStaticCredentials(accessKeyID, secretAccessKey, ""),})if err != nil {log.Fatalf("unable to create AWS session, %v", err)}s3Client = s3.New(sess)
}func UploadToS3(content []byte, fileName, mimeType string) (string, error) {_, err := s3Client.PutObject(&s3.PutObjectInput{Bucket:      aws.String(bucket),Key:         aws.String(fileName),Body:        bytes.NewReader(content),ContentType: aws.String(mimeType),})if err != nil {return "", fmt.Errorf("failed to upload file to S3, %v", err)}return fmt.Sprintf("https://%s.s3.amazonaws.com/%s", bucket, fileName), nil
}

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

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

相关文章

PHP运算符

PHP 运算符是用于执行各种操作(如算术运算、比较、逻辑运算、字符串连接等)的符号。在 PHP 中,运算符的命名主要是基于它们的功能和用法,而不是像变量或函数那样可以自定义名称。以下是一个关于 PHP 运算符的详细教程,…

unity2D游戏开发01项目搭建

1新建项目 选择2d模板,设置项目名称和存储位置 在Hierarchy面板右击,create Empty 添加组件 在Project视图中右键新建文件夹 将图片资源拖进来(图片资源在我的下载里面) 点击Player 修改属性,修好如下 点击Sprite Editor 选择第二…

Angular由一个bug说起之八:实践中遇到的一个数据颗粒度的问题

互联网产品离不开数据处理,数据处理有一些基本的原则包括:准确性、‌完整性、‌一致性、‌保密性、‌及时性。‌ 准确性:是数据处理的首要目标,‌确保数据的真实性和可靠性。‌准确的数据是进行分析和决策的基础,‌因此…

【目标检测】非极大值抑制(Non-Maximum Suppression, NMS)步骤与实现

步骤 置信度排序:首先根据预测框的置信度(即预测框包含目标物体的概率)对所有预测框进行降序排序。选择最佳预测框:选择置信度最高的预测框作为参考框。计算IoU:计算其他所有预测框与参考框的交并比(Inter…

【数据结构】建堆算法复杂度分析及TOP-K问题

【数据结构】建堆算法复杂度分析及TOP-K问题 🔥个人主页:大白的编程日记 🔥专栏:数据结构 文章目录 【数据结构】建堆算法复杂度分析及TOP-K问题前言一.复杂度分析1.1向下建堆复杂度1.2向上建堆复杂度1.3堆排序复杂度 二.TOP-K问…

深度学习1-简介

人工智能(AI)旨在打造模仿智能行为的系统。它覆盖了众多方法,涵盖了基于逻辑、搜索和概率推理的技术。机器学习是 AI 的一个分支,它通过对观测数据进行数学模型拟合来学习决策制定。这个领域近年来迅猛发展,现在几乎&a…

前端地位蹭蹭蹭Up!!!

作者:溪饱鱼 链接:juejin.cn/post/7283642910301192244 顺便吆喝一句,如果你本科学历,对技术大厂有向往,对前后端测试岗位有兴趣,不对大厂外包有100%的排斥,可以看看这里,薪酬待遇确…

Ruby语言详解

Ruby语言详解 Ruby,作为一种简单快捷的面向对象脚本语言,自20世纪90年代由日本人松本行弘(Yukihiro Matsumoto)开发以来,便以其独特的魅力和强大的功能赢得了全球开发者的青睐。Ruby不仅继承了Perl、Smalltalk、Eiffe…

​ ​【Linux】-----工具篇(多模式编辑器vim介绍及配置)

目录 认识常用三种模式 基本操作 Ⅰ、进入/打开vim Ⅱ、模式转换 Ⅲ、退出vim 命令集 Ⅰ、命令模式下 移动光标 删除文字 复制 替换 撤销 批量化注释 批量化去注释 Ⅱ、底行模式下 列出行号 跳转至指定行 查找字符 保存文件 退出vim 查看文件 分屏操作 vim的简…

论文阅读:面向自动驾驶场景的多目标点云检测算法

论文地址:面向自动驾驶场景的多目标点云检测算法 概要 点云在自动驾驶系统中的三维目标检测是关键技术之一。目前主流的基于体素的无锚框检测算法通常采用复杂的二阶段修正模块,虽然在算法性能上有所提升,但往往伴随着较大的延迟。单阶段无锚框点云检测算法简化了检测流程,…

CUE-云原生配置语言

CUE 是一种服务于云化配置的强类型配置语言,由 Go team 成员 Marcel van Lohiuzen 结合 BCL 及多种其他语言研发并开源,可以说是 BCL 思路的开源版实现CUE 是一种服务于云化配置的强类型配置语言,由 Go team 成员 Marcel van Lohiuzen 结合 B…

AI OS

一,概念 AI OS, 或AI for OS,也就是近一年来伴随着人工智能的热度而衍生出的一个新的概念 - 人工智能操作系统。 为什么提出AI OS的概念? 这是因为人工智能技术的发展势头太过迅猛,尤其在深度学习、大模型等AI技术的突破后&…

微信小程序:vant-weapp 组件库、css 变量

vant-weapp 组件库 前往 vant-weapp 官网 npm 使用限制:不支持依赖于 Node.js 内置库、浏览器内置对象、C 插件 的包。 安装 vant-weapp # 通过 npm 安装 npm i vant/weapp -S --production# 通过 yarn 安装 yarn add vant/weapp --production# 安装 0.x 版本 npm i…

Mac环境报错 error: symbol(s) not found for architecture x86_64

Mac 环境Qt Creator报错 error: symbol(s) not found for architecture x86_64 错误信息 "symbol(s) not found for architecture x86_64" 通常是在编译或链接过程中出现的问题。这种错误提示通常涉及到符号未找到或者是因为编译器没有找到适当的库文件或函数定义。 …

powe bi界面认识及矩阵表基本操作 - 1

powe bi界面认识及矩阵表操作 1. 界面认识1.1 选择数据源1.2 选择相关表及点击加载1.3 表字段显示位置1.4 表属性按钮位置1.5 界面布局按钮认识 2. 矩阵表基本操作2.1 选择矩阵表2.2 创建矩阵表2.3 设置字体大小2.4 行填充:修改高度2.5 列宽:设置列的宽度…

【下厨记】青椒土豆丝的做法和写代码之间的关系

在gap year 的尾声,我决定给自己报个厨艺培训班,精进一下厨艺。讲道理,在这样一个充斥着代码的社区写怎么做土豆丝是不是很不搭界,但其实没有,且听我娓娓道来。论,青椒土豆丝做法和写代码之间的关系。 1.找…

git怎么把本地仓库提交到远程仓库

要把本地仓库的内容推送到远程仓库,你需要先设置远程仓库的URL,然后使用git push命令。以下是步骤和示例代码: 1、在本地创建一个新的git仓库或者进入一个已存在的git仓库目录。 2、添加远程仓库(如果尚未添加)。使用…

使用RedisTemplate操作executePipelined

前言 RedisTemplate 是 Spring 提供的用于操作 Redis 的模板类,它封装了 Redis 的连接、连接池等管理,并提供了一系列的操作方法来简化 Redis 的使用。其中,executePipelined 方法是 RedisTemplate 中的一个高级特性,用于支持 Re…

【Python实战因果推断】55_因果推理概论5

目录 Consistency and Stable Unit Treatment Values Violations Causal Quantities of Interest Consistency and Stable Unit Treatment Values 在上述方程中,隐含着两个基本假设。第一个假设意味着潜在结果与处理是一致的:当时,。换句…

为什么有了MAC还需要IP?

目录 MAC地址(Media Access Control Address)IP地址(Internet Protocol Address)为什么需要两者? IP地址和MAC地址在网络通信中扮演着不同的角色,它们各自有独特的功能和用途。下面是它们的主要区别和为什么…