MinIO Go 客户端 API

MinIO 是一个基于 Apache License v2.0 开源协议的对象存储服务,与 Amazon S3 云存储服务兼容,适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器 / 虚拟机镜像等。在 Go 语言中,可以使用 MinIO 官方提供的 Go 客户端库与 MinIO 服务进行交互。以下是关于在 Go 语言中使用 MinIO 的详细代码如下介绍:

package minioimport ("bytes""context""fmt""github.com/minio/minio-go/v7""github.com/minio/minio-go/v7/pkg/credentials""io""log""net/url""os""path""time"
)type Minio struct {client     *minio.Client // 连接对象bucketName string // 桶名称
}// NewMinio ...
// endpoint 连接地址;accessKey 访问key;secret 访问密钥;bucketName 桶名称
func NewMinio(endpoint, accessKey, secret, bucketName string) Minio {// Initialize minio client object.minioClient, err := minio.New(endpoint, &minio.Options{Creds:  credentials.NewStaticV4(accessKey, secret, ""),Secure: false,})if err != nil {log.Fatal("文件服务连接失败;err=", err)}return Minio{client: minioClient,//logger:     logger,bucketName: bucketName,}
}// CreateBucket 创建桶
func (m Minio) CreateBucket(ctx context.Context) error {err := m.client.MakeBucket(ctx, m.bucketName, minio.MakeBucketOptions{Region: "cn-north-1"})if err != nil {// 检查存储桶是否已存在,若已存在导致的错误则忽略if exists, errExists := m.BucketExists(ctx, m.bucketName); errExists == nil && exists {return nil}return fmt.Errorf("创建存储桶失败: %v", err)}//m.logger.Info("存储桶 %s 创建成功\n", m.bucketName)return nil
}// ListBuckets 查询桶列表
func (m Minio) ListBuckets(ctx context.Context) ([]minio.BucketInfo, error) {buckets, err := m.client.ListBuckets(ctx)if err != nil {return nil, err}return buckets, nil
}// BucketExists 检查桶是否存在
func (m Minio) BucketExists(ctx context.Context, bucketName string) (bool, error) {found, err := m.client.BucketExists(ctx, bucketName)if err != nil {fmt.Println(err)return false, err}return found, nil
}// RemoveBucket 删除桶
func (m Minio) RemoveBucket(ctx context.Context) error {isExist, err := m.BucketExists(ctx, m.bucketName)if err != nil {fmt.Printf("Check %s err:%s", m.bucketName, err.Error())return err}if isExist {fmt.Printf("%s exists! Start delete....\n", m.bucketName)// 删除if err = m.client.RemoveBucket(ctx, m.bucketName); err != nil {fmt.Printf("Fail to remove %s:%s\n", m.bucketName, err.Error())return err}fmt.Printf("Success to remove %s\n", m.bucketName)} else {fmt.Printf("%s not exists!\n", m.bucketName)}return nil
}// UploadObject 上传文件对象
func (m Minio) UploadObject(ctx context.Context, objectName string, file *os.File) (*minio.UploadInfo, error) {fileStat, err := file.Stat()if err != nil {return nil, err}fileType := "application/octet-stream"switch path.Ext(objectName) {case ".jpg", ".jpeg":fileType = "image/jpeg"case ".png":fileType = "image/png"case ".gif":fileType = "image/gif"case ".webp":fileType = "image/webp"case ".mp4":fileType = "video/mp4"case ".avi":fileType = "video/avi"case ".pdf":fileType = "application/pdf"case ".doc":fileType = "application/msword"}// upload the fileuploadInfo, err := m.client.PutObject(ctx,m.bucketName,objectName,file,fileStat.Size(),minio.PutObjectOptions{ContentType: fileType})return &uploadInfo, err
}// ReadObject 获取文件对象
func (m Minio) ReadObject(ctx context.Context, objectName string) ([]byte, error) {contentBuffer, err := m.client.GetObject(ctx, m.bucketName, objectName, minio.GetObjectOptions{})if err != nil {return nil, err}// read the content from the buffercontentBytes := new(bytes.Buffer)if _, err = io.Copy(contentBytes, contentBuffer); err != nil {return nil, err}return contentBytes.Bytes(), nil
}// StateObjects 查询文件信息
func (m Minio) StateObjects(ctx context.Context, objectName string) (*minio.ObjectInfo, error) {objInfo, err := m.client.StatObject(ctx, m.bucketName, objectName, minio.StatObjectOptions{})if err != nil {return nil, err}return &objInfo, err
}// PresignedGetObject 创建预览地址
func (m Minio) PresignedGetObject(ctx context.Context, objectName string) (*url.URL, error) {reqParams := make(url.Values)// 若需要生成的链接直接下载文件的把下面的注释打开,需要预览的则不需要打开//reqParams.Set("response-content-disposition", "attachment; filename="+path.Base(objectName))// Generates a presigned url which expires in a day.presignedURL, err := m.client.PresignedGetObject(ctx, m.bucketName, objectName, time.Second*24*60*60, reqParams)if err != nil {return nil, err}return presignedURL, err
}// RemoveObject 删除文件对象
func (m Minio) RemoveObject(ctx context.Context, objectName string) error {opts := minio.RemoveObjectOptions{}err := m.client.RemoveObject(ctx, m.bucketName, objectName, opts)if err != nil {fmt.Println(err)return err}return nil
}

官网API地址MinIO Go Client API Reference — MinIO中文文档 | MinIO Linux中文文档

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

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

相关文章

Linux搜索查找类指令

1、find指令 基本语法:find [搜索范围] [选项] 功能:将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或目录显示在终端。 常用选项: 操作 命令示例 说明 查找指定路径下的所有文件 find /path/to/dir 查找指定目…

uniapp 网络请求封装(uni.request 与 uView-Plus)

一、背景 在开发项目中,需要经常与后端服务器进行交互;为了提高开发效率和代码维护性,以及降低重复性代码,便对网络请求进行封装统一管理。 二、创建环境文件 2.1、根目录新建utils文件夹,utils文件夹内新建env.js文…

ReentrantLock 用法与源码剖析笔记

📒 ReentrantLock 用法与源码剖析笔记 🚀 一、ReentrantLock 核心特性 🔄 可重入性:同一线程可重复获取锁(最大递归次数为 Integer.MAX_VALUE)🔧 公平性:支持公平锁(按等…

【蓝桥杯单片机】客观题

一、第十三届省赛(一) 二、第十三届省赛(二)

数据库(MySQL):使用命令从零开始在Navicat创建一个数据库及其数据表(一).创建基础表

一. 使用工具和命令 1.1 使用的工具 Navicat Premium 17 :“Navicat”是一套可创建多个连接的数据库管理工具。 MySQL版本8.0.39 。 1.2 使用的命令 Navicat中使用的命令 命令 命令解释 SHOW DATABASES; 展示所有的数据库 CREATE DATABASE 数据…

deepseek清华大学第二版 如何获取 DeepSeek如何赋能职场应用 PDF文档 电子档(附下载)

deepseek清华大学第二版 DeepSeek如何赋能职场 pdf文件完整版下载 https://pan.baidu.com/s/1aQcNS8UleMldcoH0Jc6C6A?pwd1234 提取码: 1234 或 https://pan.quark.cn/s/3ee62050a2ac

【Linux Oracle】time命令+oracle exp压缩

Linux && Oracle相关文档,希望互相学习,共同进步 风123456789~-CSDN博客 1.说明 Linux中的time命令:主要用于测量命令的执行时间,并显示该命令在执行过程中所使用的系统资源情况,如CPU时间、内存和…

游戏引擎学习第123天

仓库:https://gitee.com/mrxiao_com/2d_game_3 黑板:线程同步/通信 目标是从零开始编写一个完整的游戏。我们不使用引擎,也不依赖任何库,完全自己编写游戏所需的所有代码。我们做这个节目不仅是为了教育目的,同时也是因为编程本…

MCP协议

原理讲解 基础概念 Introduction - Model Context Protocol MCP Host:想要通过 MCP 访问数据的程序,例如 Claude Desktop、IDE 或 AI 工具MCP Clients:与服务器保持 1:1 连接的协议客户端MCP Servers:轻量级程序,每个…

Maven环境搭建

Maven 1. 概述 ApacheMaven是一个软件项目管理和构建工具。基于项目对象模型(POM)的概念,Maven可以从中心信息中管理项目的构建、报告和文档 理解: maven构建项目(100%)而且帮你完成jar的统一管理。 思考: 原来的jar—…

llaMa模型的创新

LLaMa介绍 LLaMa是基于transformer encoder的生成式模型。 目前有:LLAMA, LLAMA2, LLAMA3 三个大的版本 论文 LLAMA 2: Open Foundation and Fine-Tuned Chat Models: https://arxiv.org/pdf/2307.09288 LLAMA 3: The Llama 3 Herd of Models https…

渗透测试实验

1、seacmsv9注入管理员密码 获取管理员账号(name) http://www.test2.com/comment/api/index.php?gid1&page2&rlist[]%27,%20extractvalue(1,%20concat_ws(0x20,%200x5c,(select%20(name)from%20sea_admin))),%27 2、获取管理员密码 http://www…

文心一言AI创意画

介绍 文心一言是百度推出的新一代知识增强大语言模型,属于文心大模型家族的新成员。‌它能够与人对话互动、回答问题、协助创作,高效便捷地帮助人们获取信息、知识和灵感。‌ 特点 文心一言基于数万亿数据和数千亿知识进行融合学习,采用预训…

安装VM和Centos

安装VM 一、打开虚拟机 二、选择典型 三、选择光盘 四、指定虚拟机位置 五、设置磁盘大小并拆分为多个文件 六、完成 安装Centos 一、上述过程完成后我们直接打开虚拟机 二、语言选择中文 三、默认安装位置并点击完成 四、点击开始安装 五、点击设置密码 设置完密码后点击完成…

优选算法大集合(待更新)

1.双指针 1.1.移动零 leetcode链接:283. 移动零 - 力扣(LeetCode)​​​​​​ 移动零的问题我们可以将它归类为数组划分的问题,我们将数组划分为非零部分和零部分。我们会使用到双指针的算法,在这里,我…

微信小程序面试题

微信小程序面试题 微信小程序页面的生命周期函数主要包括哪些? onLoad: 页面加载时触发。一个页面只会调用一次,可以在onLoad的参数中获取打开当前页面路径中的参数。 onShow: 页面显示时触发调用。 onReady: 页面初次渲染完成时触发,一个页面只会调…

Git详解及常用命令

一、Git概述 官网:https://git-scm.com/ 安装:安装适合自己的版本,默认安装即可 使用:选择一个文件夹,右键,当出现:Git Bash后说明安装成功,后续使用都是基于Git Bash Git简介 G…

MongoDB 面试题目

一、基础概念 MongoDB 的特点是什么? MongoDB是一种NoSQL数据库,具有以下特点: 文档存储模型 MongoDB 使用 BSON(Binary JSON) 格式存储数据,数据以文档的形式组织,类似于JSON对象。文档可以包…

路由追踪核心技术深度解析:Traceroute与Tracert命令实战指南(跨平台/抓包/网络安全防护)

目录 路由器是什么? 路由器的基本功能: 路由追踪技术(Traceroute) 路由追踪的工作原理 实现技术 路由追踪的输出示例 路由追踪的用途 traceroute 命令(Linux 和 macOS) 基本语法 常用选项 示例 …

4部署kibana:5601

kibana 是一个基于浏览器页面的Elasticsearch前端展示工具,, 是一个开源和免费的工具 Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面, 可以帮你汇总、分析和搜索重要数据日志 1.安装-所有的es节点 # tar xf kibana-6.4.1-linux-x86_64.t…