使用Golang上传文件到MinIO对象存储(一)

本文涉及的产品
对象存储 OSS,20GB 3个月
对象存储 OSS,内容安全 1000次 1年
对象存储 OSS,恶意文件检测 1000次 1年
简介: 前一篇文章介绍了开源存储系统 MinIO 的基本内容,今天我们就来看一下,如何使用 Golang 语言将本地的文件上传到 MinIO 对象存储服务上。

前言

前一篇文章介绍了开源存储系统 MinIO 的基本内容,今天我们就来看一下,如何使用 Golang 语言将本地的文件上传到 MinIO 对象存储服务上。

集成SDK

步骤一

首先,导入 minio-go sdk 包,这是我们上传 MinIO 对象存储的前提,其实,我们可以多种语言实现上传功能,今天仅以 Golang 为例进行说明。

导入sdk包:

import "github.com/minio/minio-go/v6"

步骤二

创建 MinIO 服务的配置参数,包括服务地址、服务ID、服务Key、服务协议类型。其中,服务地址可以是域名,也可以是IP+端口;服务协议类型可以是http,或者是https,意思是上传资源后,生成可访问地址的协议类型。

 endpoint := "172.31.102.222:9000"
 accessKeyID := "admin"
 secretAccessKey := "test123"
 useSSL := true

步骤三

创建 MinIO 客户端对象,所需要的参数信息就是第二步中的配置参数内容。代码如下:

minioClient, err :=minio.New(endpoint, accessKeyID, secretAccessKey, useSSL)
iferr!=nil {
log.Fatalln("创建 MinIO 客户端失败", err)
return    }
log.Printf("创建 MinIO 客户端成功")

步骤四

创建存储桶,最后在创建时,先校验目标存储桶是否已经存在,如果已经存在则不需要再进行创建,具体代码如下:

// 创建一个叫 mybucket 的存储桶。bucketName :="mybucket"location :="beijing"err=minioClient.MakeBucket(bucketName, location)
iferr!=nil {
// 检查存储桶是否已经存在。exists, err :=minioClient.BucketExists(bucketName)
iferr==nil&&exists {
log.Printf("存储桶 %s 已经存在", bucketName)
        } else {
log.Fatalln("查询存储桶状态异常", err)
        }
    }
log.Printf("创建存储桶 %s 成功", bucketName)

步骤五

指定上传文件、存储路径、文件类型,调用 minio-go 上传接口 FPutObject,进行上传操作。具体代码如下:

// 指定上传文件为 test.txtobjectName :="test.txt"// 指定上传文件路径filePath :="/test/test.txt"// 指定上传文件类型contentType :="application/zip"// 调用 FPutObject 接口上传文件。n, err :=minioClient.FPutObject(bucketName, objectName, filePath, minio.PutObjectOptions{ContentType:contentType})
iferr!=nil {
log.Fatalln("上传文件失败", err)
    }
log.Printf("上传文件 %s 成功\n", objectName)

好了,到这里,上传代码就都编写完了。

测试验证毫无压力。

异常处理

如果在执行过程中遇到了如下报错信息,可以将服务协议类型设置成 false,也就是 useSSL = false,问题解决。其实,根本原因是服务器 MinIO 的服务协议类型和客户端使用的协议类型不一致造成的。如果服务器支持 https,那么客户端可以将 useSSL 置成 true。

报错信息:

Get "https://172.31.102.222:9000/mybucket/?location=beijing": http: server gave HTTP response to HTTPS client



作者简介:😄大家好,我是 Data-Mining(liuzhen007),是一位典型的音视频技术爱好者,前后就职于传统广电巨头和音视频互联网公司,具有丰富的音视频直播和点播相关经验,对 WebRTC、FFmpeg 和 Electron 有非常深入的了解,😄公众号:玩转音视频。同时也是 CSDN 博客专家、华为云享专家(共创编辑)、InfoQ 签约作者,欢迎关注我分享更多干货!😄

相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
目录
相关文章
|
1月前
|
存储 Java API
开源对象存储服务(MinIO),正在备受欢迎!
本文介绍了MinIO,一个高性能、开源的对象存储服务器,兼容Amazon S3 API,适合存储大量非结构化数据。文章详细讲解了MinIO在Java中的使用方法,包括添加依赖、初始化客户端、基本操作(创建桶、上传/下载/删除对象)和高级功能(设置桶策略、使用预签名URL),并提供了Spring Boot集成MinIO的示例。
167 4
|
1月前
|
Unix Linux Go
go进阶编程:Golang中的文件与文件夹操作指南
本文详细介绍了Golang中文件与文件夹的基本操作,包括读取、写入、创建、删除和遍历等。通过示例代码展示了如何使用`os`和`io/ioutil`包进行文件操作,并强调了错误处理、权限控制和路径问题的重要性。适合初学者和有经验的开发者参考。
|
1月前
|
算法 大数据 Go
Go文件操作:掌握Go的文件读写与操作技巧
本文介绍了Go语言的文件操作功能,包括文件的打开、读写和关闭。Go语言通过`os`和`io`包提供了丰富的文件操作接口,使开发者能够轻松实现文件的读写和管理。文章详细讲解了核心概念、具体操作步骤和代码示例,并探讨了实际应用场景和未来发展趋势。
|
1月前
|
存储 前端开发 Go
Go 文件的读取操作
本文介绍了 Go 语言标准库中的 `os` 包和 `bufio` 包,重点讲解了 `os` 包中的 `Open` 和 `OpenFile` 函数及 `File` 结构体的 `Read` 方法,以及 `bufio` 包中的 `NewReader` 函数和 `Reader` 结构体的 `ReadString` 方法。通过示例代码展示了如何使用这些方法高效读取文件,减少磁盘操作。
|
2月前
|
存储 Go 文件存储
M.2移动硬盘打造Win To Go系统:高效分区存储文件全攻略
【10月更文挑战第12天】本文详细介绍了如何使用M.2移动硬盘制作Win To Go系统。首先,需准备合适容量与接口类型的M.2硬盘及硬盘盒,并获取Windows镜像文件和分区工具。接着,通过Rufus软件将镜像写入硬盘。文中还提供了分区策略,包括系统分区(约80-120GB)、软件分区(根据需求设定)和数据分区(剩余空间),并指导如何使用DiskGenius或Windows自带工具进行分区。最后,强调了对各分区文件的有效管理和定期备份的重要性。
179 3
|
2月前
|
存储 固态存储 Go
M.2移动硬盘打造Win To Go系统:高效分区存储文件全攻略
【10月更文挑战第11天】Win To Go 是一种将 Windows 系统安装在 M.2 移动硬盘上的技术,便于用户携带自定义系统跨设备使用。需准备高性能 M.2 硬盘及合适硬盘盒,并使用 DiskGenius 或 Rufus 进行分区与系统安装。系统分区用于安装 Windows,其余分区可根据需求存储工作或娱乐文件,便于管理和备份。
238 2
|
4月前
|
文字识别 算法 API
视觉智能开放平台产品使用合集之上传素材文件不在同一地域的OSS,怎么上传多张图片
视觉智能开放平台是指提供一系列基于视觉识别技术的API和服务的平台,这些服务通常包括图像识别、人脸识别、物体检测、文字识别、场景理解等。企业或开发者可以通过调用这些API,快速将视觉智能功能集成到自己的应用或服务中,而无需从零开始研发相关算法和技术。以下是一些常见的视觉智能开放平台产品及其应用场景的概览。
50 1
|
4月前
|
存储 运维 Serverless
函数计算产品使用问题之OSS触发器是否可以只设置文件前缀
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
5月前
|
消息中间件 分布式计算 DataWorks
DataWorks产品使用合集之如何使用Python和阿里云SDK读取OSS中的文件
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
|
5月前
|
分布式计算 DataWorks 调度
DataWorks产品使用合集之在使用MaxCompute进行数据集成同步到OSS时,出现表名和OSS文件名不一致且多了后缀,该如何处理
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。