前言
前一篇文章介绍了开源存储系统 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 签约作者,欢迎关注我分享更多干货!😄