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

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

作者头像
ZGGSONG
发布于 2022-09-09 02:52:40
发布于 2022-09-09 02:52:40
2.5K10
代码可运行
举报
文章被收录于专栏:日志日志
运行总次数:0
代码可运行

前言

最近学习使用对象存储,自然要学习一下 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}错误

代码语言:javascript
代码运行次数:0
运行
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, err
    }

    client := s3.NewFromConfig(cfg, func(o *s3.Options) {
        o.UsePathStyle = true
        o.EndpointOptions.DisableHTTPS = true
    })
    return client, nil
}

如下是主要主要代码

代码语言:javascript
代码运行次数:0
运行
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
}

参考

本文作者:ZGGSONG

本文链接:https://www.zggsong.cn/archives/gostudy_s3_object_url.html

版权声明:本站所有未注明转载的文章均为原创,并采用CC BY-NV-SA 4.0授权协议,转载请注明来源

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
这个 URL 地址存在问题必须要将响应的 header 添加到 get request-header 中才能访问通.
这个 URL 地址存在问题必须要将响应的 header 添加到 get request-header 中才能访问通.
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
S3对象存储获取预签名URL | Golang
最近学习使用对象存储,自然要学习一下 Amazon S3,同时最近学了一下Golang,简单记录一下学习使用 AWS SDK for Go V2 生成文件预签名URL,
ZGGSONG
2022/07/21
3.3K0
自动监控文件并上传S3对象存储服务器 | Golang
本地平台:Windows 10 专业版 21H2 (19044.1826)、开发语言:go1.18.3 windows/amd64
ZGGSONG
2022/09/23
1.3K0
从源代码级别看懂MinIO对象存储网关的实现
我在 《MinIO对象存储的网关架构设计》一文中介绍了MinIO的网关架构设计,它的整体架构如下图所示:
飞雪无情
2020/10/27
4.2K0
从源代码级别看懂MinIO对象存储网关的实现
Harbor对接Ceph S3推大镜像retry的问题
当我们部署私有 Harbor 镜像仓库且采用 Ceph S3 作为存储后端时,您可能会经常遇到上传大容量镜像重试的问题。特别是当我们在管理 AI 模型文件发布的场景下,当我们采用 OCI 方式来封装模型文件(镜像单层超过 5GB)上传到 Harbor后,此现象就变得尤为突出。其主要现象如下:
云原生小白
2022/06/06
1.7K0
Harbor对接Ceph S3推大镜像retry的问题
MinIO 分片上传
MinIO 简单易用。简单性是 EB 级数据基础设施的基础 - 无论是在技术上还是在操作上。MinIO 使用和部署非常简单,没有其他对象存储可以让您在最快的时间内实现下载到生产环境的部署。
恋喵大鲤鱼
2023/10/12
4.8K0
MinIO 分片上传
milvus对象存储和消息中间件设计模式分析
对于这种类型一个是mq,一个是存储,相比工厂方法设计模式,使用抽象工厂设计模式更合理。
melodyshu
2024/04/23
1810
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
MinIO对象存储
MinIO 是一个基于Apache License v2.0开源协议的对象存储服务。它兼容亚马逊S3云存储服务接口,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意大小,从几kb到最大5T不等。
别团等shy哥发育
2023/03/30
7.6K0
MinIO对象存储
开发一个 etcd 备份的 operator
前面我们已经实现了一个简单的 etcd operator,要实现 etcd 集群的完整运维,备份和恢复肯定也是必不可少的,本文主要和大家介绍如何编写一个用于 etcd 备份的 Operator。
我是阳明
2021/01/04
1.9K0
开发一个 etcd 备份的 operator
如何使用亚马逊对象存储AWS S3 SDK访问腾讯云存储COS
COS 提供了 AWS S3 兼容的 API,因此当您的数据从 S3 迁移到 COS 之后,只需要进行简单的配置修改,即可让您的客户端应用轻松兼容 COS 服务。本文主要介绍不同开发平台的 S3 SDK 的适配步骤。在完成添加适配步骤后,您就可以使用 S3 SDK 的接口来访问 COS 上的文件了。
云存储
2020/05/26
4.6K0
使用DaemonSet实现heapdump文件自动化管理
heapdump文件是Java应用遭遇OOM后的诊断报告,记录了某一时刻 JVM 堆中对象的详细使用情况,是 JVM 堆内存的一个快照。通过分析 heapdump 文件,我们可以深入了解到内存中究竟存在哪些对象,它们占用了多少内存空间,以及对象之间的引用关系如何。这对于定位内存泄漏问题至关重要。
没有故事的陈师傅
2025/02/07
1670
使用DaemonSet实现heapdump文件自动化管理
通过Go写一个简易版的上传文件到存储的工具
一、场景说明在设计CICD流程中,需要将安卓的APK包上传到文件存储中去,然后将对应的下载链接发给产研、运营人员进行内部使用测试;之前我是通过Groovy实现将构建好的成品上传到私服中去的,后面业务全部迁移上云之后,就想着在将APK包直接上传到OSS存储中去,然后将生成的下载链接通过企业微信或者钉钉自动推送给相应的人员。项目地址:https://github.com/dqzboy二、实现方式创建子账号,获取子账号AccessKey创建Bucket,并授权OSS读写权限通过Go调用OSS-SDK进行实现文件的
浅时光博客
2022/09/12
1.1K0
通过Go写一个简易版的上传文件到存储的工具
使用腾讯云go sdk 查询对象存储中最新文件
我现在想确认某一个对象存储桶的活跃程度,简单的来说。我想知道这个桶里面最后上传的一个文件是什么,以及它的上传时间戳。
对你无可奈何
2024/02/28
3270
使用Velero实现K8S集群资源备份到对象存储COS
开源工具 Velero(旧版本名称为 Heptio Ark)可以安全地备份和还原、执行灾难恢复以及迁移 Kubernetes 集群资源和持久卷。在容器服务 TKE 集群或自建 Kubenetes 集群中部署 Velero 可以实现以下功能:
Lcry
2022/11/29
1.7K0
使用Velero实现K8S集群资源备份到对象存储COS
AWS S3 学习小结
1.首先,这个是AWS的开发资源使用文档:AWS开发文档,AWS官网 – S3教程
全栈程序员站长
2022/11/03
1.9K0
golang 源码分析:minio(part I)路由
MinIO的命令行启动只有2个命令,一个是server、一个是gateway,分别用于启动服务和网关,而整个MinIO的启动是从main.go文件开始的
golangLeetcode
2022/08/03
1.1K0
minio使用简介
在云原生和微服务时代,对象存储已成为存储非结构化数据(如图片、日志、备份等)的首选方案。MinIO 是一款高性能、兼容 S3 API 的开源对象存储服务,而它的官方 Go SDK —— minio-go,则可以让你在 Go 语言项目中轻松集成对象存储功能。
孟斯特
2025/04/24
3090
minio使用简介
通过S3协议实现通用的文件存储服务中间件
在日常开发文件上传相关服务时,通常都会选择腾讯云,阿里云,七牛云等提供的oss服务作为文件存储系统,如果需要自行搭建文件存储系统,通常则会采用minio等开源项目。
大忽悠爱学习
2022/09/28
5.9K0
通过S3协议实现通用的文件存储服务中间件
聊聊nacos-sdk-go的ConfigProxy
nacos-sdk-go-v0.3.2/clients/config_client/config_proxy.go
code4it
2020/07/02
5980
相关推荐
S3对象存储获取预签名URL | Golang
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验