Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >S3对象存储获取预签名URL | Golang

S3对象存储获取预签名URL | Golang

原创
作者头像
ZGGSONG
发布于 2022-07-21 08:03:47
发布于 2022-07-21 08:03:47
3.3K0
举报
文章被收录于专栏:日志日志

前言

最近学习使用对象存储,自然要学习一下 Amazon S3,同时最近学了一下Golang,简单记录一下学习使用 AWS SDK for Go V2 生成文件预签名URL,

预签名:有些时候需要给别人访问对象存储中的对象,又不想给对方桶的权限来访问,就可以通过生成预签名URL给别人临时访问对象。官方目前是有两个签名版本SigV2-带参数&Expires-1年 和SigV4带参数-&X-Amz-Expires-7天,考虑到安全性和使用效率等因素,目前官方已停止SigV2版本的支持。

实操

首先创建 S3 Client 对象,在写代码的过程中,我发现Golang的SDK V2版本和其他语言包括Go的V1版本在创建client对象的时候都有不小的区别,我写的仅作参考

针对自建的对象存储服务器,使用endpoint时注意UsePathStyletrue,不然会出现http://{bucket}.{endpoint}错误

代码语言:go
AI代码解释
复制
func GetClient(accesskey, secretkey, endpoint string) (\*s3.Client, error) {

    cfg, err := config.LoadDefaultConfig(

        context.TODO(),

        config.WithCredentialsProvider(credentials.NewStaticCredentialsProvider(accesskey, secretkey, "")),

        // 已弃用

        // config.WithEndpointResolver(

            //     aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {

                //         return aws.Endpoint{URL: endpoint}, nil

                //     })),

        config.WithEndpointResolverWithOptions(

            aws.EndpointResolverWithOptionsFunc(func(service, region string, options ...interface{}) (aws.Endpoint, error) {

                return aws.Endpoint{URL: endpoint}, nil

            })),

        config.WithRegion("us-east-1"),

    )

    if err != nil {

        return nil, er

    }



    client := s3.NewFromConfig(cfg, func(o \*s3.Options) {

        o.UsePathStyle = true

        o.EndpointOptions.DisableHTTPS = true

    })

    return client, nil

}

如下是主要主要代码

代码语言:go
AI代码解释
复制
type S3PresignGetObjectAPI interface {

    PresignGetObject(

        ctx context.Context,

        params \*s3.GetObjectInput,

        optFns ...func(\*s3.PresignOptions)) (\*v4.PresignedHTTPRequest, error)

}



func GetPresignedURL(c context.Context, api S3PresignGetObjectAPI, input \*s3.GetObjectInput) (\*v4.PresignedHTTPRequest, error) {

    return api.PresignGetObject(c, input)

}



// 获取预签名的url

func GetObjectUrl(client \*s3.Client, bucket string, key string) string {

    input := &s3.GetObjectInput{

        Bucket: aws.String(bucket),

        Key:    aws.String(key),

    }



    psClient := s3.NewPresignClient(client)



    resp, err := GetPresignedURL(context.TODO(), psClient, input)

    if err != nil {

        return ("get url err: " + err.Error())

    }

    return resp.URL

}

参考

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
S3对象存储获取预签名URL | Golang
最近学习使用对象存储,自然要学习一下 Amazon S3,同时最近学了一下Golang,简单记录一下学习使用 AWS SDK for Go V2 生成文件预签名URL,
ZGGSONG
2022/09/09
2.5K1
自动监控文件并上传S3对象存储服务器 | Golang
本地平台:Windows 10 专业版 21H2 (19044.1826)、开发语言:go1.18.3 windows/amd64
ZGGSONG
2022/09/23
1.3K0
Harbor对接Ceph S3推大镜像retry的问题
当我们部署私有 Harbor 镜像仓库且采用 Ceph S3 作为存储后端时,您可能会经常遇到上传大容量镜像重试的问题。特别是当我们在管理 AI 模型文件发布的场景下,当我们采用 OCI 方式来封装模型文件(镜像单层超过 5GB)上传到 Harbor后,此现象就变得尤为突出。其主要现象如下:
云原生小白
2022/06/06
1.7K0
Harbor对接Ceph S3推大镜像retry的问题
聊聊nacos-sdk-go的NacosServer
nacos-sdk-go-v0.3.2/common/nacos_server/nacos_server.go
code4it
2020/07/02
3290
使用minio搭建私有化对象存储服务
在工作中我们或多或少都会接触到对象存储,但是这些对象存储大部分都是云服务,对外的项目还可以使用,但是遇到一些需要私有化部署的,我们还想继续使用对象存储怎么办呢?
咪啪咪啪
2020/06/18
6.5K0
使用minio搭建私有化对象存储服务
MinIO 分片上传
MinIO 简单易用。简单性是 EB 级数据基础设施的基础 - 无论是在技术上还是在操作上。MinIO 使用和部署非常简单,没有其他对象存储可以让您在最快的时间内实现下载到生产环境的部署。
恋喵大鲤鱼
2023/10/12
4.8K0
MinIO 分片上传
Go操作腾讯云COS对象存储的简单使用案例
Golang:用于下载和安装 Go 编译运行环境,请前往 Golang 官网进行下载
iginkgo18
2020/09/27
3.5K0
Go操作腾讯云COS对象存储的简单使用案例
golang 源码分析:mc,minio-go
对象存储服务(Object Storage Service,OSS)是一种海量、安全、低成本、高可靠的云存储服务,适合存放任意类型的文件。容量和处理能力弹性扩展,多种存储类型供选择,全面优化存储成本。Minio 除了直接作为对象存储使用,还可以作为云上对象存储服务的网关层,无缝对接到 Amazon S3、MicroSoft Azure。 在学习minio的源码之前,先阅读下minio的客户端mc和golang sdk minio-go
golangLeetcode
2022/08/03
1.5K0
聊聊rocketmq-client-go的ACLInterceptor
本文主要研究一下rocketmq-client-go的ACLInterceptor
code4it
2020/07/08
5610
聊聊rocketmq-client-go的ACLInterceptor
MinIO对象存储
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
别团等shy哥发育
2023/03/30
7.6K0
MinIO对象存储
如何使用亚马逊对象存储AWS S3 SDK访问腾讯云存储COS
COS 提供了 AWS S3 兼容的 API,因此当您的数据从 S3 迁移到 COS 之后,只需要进行简单的配置修改,即可让您的客户端应用轻松兼容 COS 服务。本文主要介绍不同开发平台的 S3 SDK 的适配步骤。在完成添加适配步骤后,您就可以使用 S3 SDK 的接口来访问 COS 上的文件了。
云存储
2020/05/26
4.6K0
开发一个 etcd 备份的 operator
前面我们已经实现了一个简单的 etcd operator,要实现 etcd 集群的完整运维,备份和恢复肯定也是必不可少的,本文主要和大家介绍如何编写一个用于 etcd 备份的 Operator。
我是阳明
2021/01/04
1.9K0
开发一个 etcd 备份的 operator
使用DaemonSet实现heapdump文件自动化管理
heapdump文件是Java应用遭遇OOM后的诊断报告,记录了某一时刻 JVM 堆中对象的详细使用情况,是 JVM 堆内存的一个快照。通过分析 heapdump 文件,我们可以深入了解到内存中究竟存在哪些对象,它们占用了多少内存空间,以及对象之间的引用关系如何。这对于定位内存泄漏问题至关重要。
没有故事的陈师傅
2025/02/07
1670
使用DaemonSet实现heapdump文件自动化管理
使用腾讯云go sdk 查询对象存储中最新文件
我现在想确认某一个对象存储桶的活跃程度,简单的来说。我想知道这个桶里面最后上传的一个文件是什么,以及它的上传时间戳。
对你无可奈何
2024/02/28
3250
AWS S3 学习小结
1.首先,这个是AWS的开发资源使用文档:AWS开发文档,AWS官网 – S3教程
全栈程序员站长
2022/11/03
1.9K0
通过Go写一个简易版的上传文件到存储的工具
一、场景说明在设计CICD流程中,需要将安卓的APK包上传到文件存储中去,然后将对应的下载链接发给产研、运营人员进行内部使用测试;之前我是通过Groovy实现将构建好的成品上传到私服中去的,后面业务全部迁移上云之后,就想着在将APK包直接上传到OSS存储中去,然后将生成的下载链接通过企业微信或者钉钉自动推送给相应的人员。项目地址:https://github.com/dqzboy二、实现方式创建子账号,获取子账号AccessKey创建Bucket,并授权OSS读写权限通过Go调用OSS-SDK进行实现文件的
浅时光博客
2022/09/12
1.1K0
通过Go写一个简易版的上传文件到存储的工具
这才是企业级的oss-spring-boot-starter,开箱即用!
本文主要讲解企业级OSS对象存储服务Spring Boot Starter制作,开箱即用,为项目进行赋能。基于AmazonS3协议,适配市面上的对象存储服务如:阿里云OSS、腾讯COS、七牛云OSS、MInio等等 什么是OSS? OSS(Object Storage Service),对象存储服务,对象存储服务是一种使用HTTP API存储和检索对象的工具。就是将系统所要用的文件上传到云硬盘上,该云硬盘提供了文件下载、上传、预览等一系列服务,具备版本,权限控制能力,具备数据生命周期管理能力这样的服务以及技术可以统称为OSS OSS在项目中的使用 OSS对象存储在目前大部分项目中必不可少的存在,如下图所示。
民工哥
2024/04/02
5180
这才是企业级的oss-spring-boot-starter,开箱即用!
聊聊nacos-sdk-go的ConfigProxy
nacos-sdk-go-v0.3.2/clients/config_client/config_proxy.go
code4it
2020/07/02
5980
通过S3协议实现通用的文件存储服务中间件
在日常开发文件上传相关服务时,通常都会选择腾讯云,阿里云,七牛云等提供的oss服务作为文件存储系统,如果需要自行搭建文件存储系统,通常则会采用minio等开源项目。
大忽悠爱学习
2022/09/28
5.8K0
通过S3协议实现通用的文件存储服务中间件
golang 源码分析:minio(part I)路由
MinIO的命令行启动只有2个命令,一个是server、一个是gateway,分别用于启动服务和网关,而整个MinIO的启动是从main.go文件开始的
golangLeetcode
2022/08/03
1.1K0
相关推荐
S3对象存储获取预签名URL | Golang
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档