Minio Go Client API文档

初使化Minio Client对象。

Minio

  1. package main
  2. import(
  3. "fmt"
  4. "github.com/minio/minio-go"
  5. )
  6. func main(){
  7. // 使用ssl
  8. ssl :=true
  9. // 初使化minio client对象。
  10. minioClient, err := minio.New("play.minio.io:9000","Q3AM3UQ867SPQQA43P2F","zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG", ssl)
  11. if err !=nil{
  12. fmt.Println(err)
  13. return
  14. }
  15. }

AWS S3

  1. package main
  2. import(
  3. "fmt"
  4. "github.com/minio/minio-go"
  5. )
  6. func main(){
  7. // 使用ssl
  8. ssl :=true
  9. // 初使化minio client对象。
  10. s3Client, err := minio.New("s3.amazonaws.com","YOUR-ACCESSKEYID","YOUR-SECRETACCESSKEY", ssl)
  11. if err !=nil{
  12. fmt.Println(err)
  13. return
  14. }
  15. }
操作存储桶操作对象操作加密对象Presigned操作存储桶策略/通知客户端自定义设置
MakeBucketGetObjectNewSymmetricKeyPresignedGetObjectSetBucketPolicySetAppInfo
ListBucketsPutObjectNewAsymmetricKeyPresignedPutObjectGetBucketPolicySetCustomTransport
BucketExistsCopyObjectGetEncryptedObjectPresignedPostPolicySetBucketNotificationTraceOn
RemoveBucketStatObjectPutEncryptedObjectGetBucketNotificationTraceOff
ListObjectsRemoveObjectNewSSEInfoRemoveAllBucketNotificationSetS3TransferAccelerate
ListObjectsV2RemoveObjectsFPutEncryptedObjectListenBucketNotification
ListIncompleteUploadsRemoveIncompleteUpload
FPutObject
FGetObject
ComposeObject
NewSourceInfo
NewDestinationInfo
PutObjectWithContext
GetObjectWithContext
FPutObjectWithContext
FGetObjectWithContext

1. 构造函数

New(endpoint, accessKeyID, secretAccessKey string, ssl bool) (*Client, error)

初使化一个新的client对象。

参数

参数类型描述
endpointstringS3兼容对象存储服务endpoint
accessKeyIDstring对象存储的Access key
secretAccessKeystring对象存储的Secret key
sslbooltrue代表使用HTTPS

NewWithRegion(endpoint, accessKeyID, secretAccessKey string, ssl bool, region string) (*Client, error)

初使化minio client,带有region配置。和New()不同的是,NewWithRegion避免了bucket-location操作,所以会快那么一丢丢。如果你的应用只使用一个region的话可以用这个方法。

参数

参数类型描述
endpointstringS3兼容对象存储服务endpoint
accessKeyIDstring对象存储的Access key
secretAccessKeystring对象存储的Secret key
sslbooltrue代表使用HTTPS
regionstring对象存储的region

2. 操作存储桶

MakeBucket(bucketName, location string) error

创建一个存储桶。

参数

参数类型描述
bucketNamestring存储桶名称
locationstring存储桶被创建的region(地区),默认是us-east-1(美国东一区),下面列举的是其它合法的值。注意:如果用的是minio服务的话,resion是在它的配置文件中,(默认是us-east-1)。
us-east-1
us-west-1
us-west-2
eu-west-1
eu-central-1
ap-southeast-1
ap-northeast-1
ap-southeast-2
sa-east-1

示例

  1. err = minioClient.MakeBucket("mybucket","us-east-1")
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }
  6. fmt.Println("Successfully created mybucket.")

ListBuckets() ([]BucketInfo, error)

列出所有的存储桶。

参数类型描述
bucketList[]minio.BucketInfo所有存储桶的list。

minio.BucketInfo

参数类型描述
bucket.Namestring存储桶名称
bucket.CreationDatetime.Time存储桶的创建时间

示例

  1. buckets, err := minioClient.ListBuckets()
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }
  6. for _, bucket := range buckets {
  7. fmt.Println(bucket)
  8. }

BucketExists(bucketName string) (found bool, err error)

检查存储桶是否存在。

参数

参数类型描述
bucketNamestring存储桶名称

返回值

参数类型描述
foundbool存储桶是否存在
errerror标准Error

示例

  1. found, err := minioClient.BucketExists("mybucket")
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }
  6. if found {
  7. fmt.Println("Bucket found")
  8. }

RemoveBucket(bucketName string) error

删除一个存储桶,存储桶必须为空才能被成功删除。

参数

参数类型描述
bucketNamestring存储桶名称

示例

  1. err = minioClient.RemoveBucket("mybucket")
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }

ListObjects(bucketName, prefix string, recursive bool, doneCh chan struct{}) <-chan ObjectInfo

列举存储桶里的对象。

参数

参数类型描述
bucketNamestring存储桶名称
objectPrefixstring要列举的对象前缀
recursivebooltrue代表递归查找,false代表类似文件夹查找,以'/'分隔,不查子文件夹。
doneChchan struct{}在该channel上结束ListObjects iterator的一个message。

返回值

参数类型描述
objectInfochan minio.ObjectInfo存储桶中所有对象的read channel,对象的格式如下:

minio.ObjectInfo

属性类型描述
objectInfo.Keystring对象的名称
objectInfo.Sizeint64对象的大小
objectInfo.ETagstring对象的MD5校验码
objectInfo.LastModifiedtime.Time对象的最后修改时间
  1. // Create a done channel to control 'ListObjects' go routine.
  2. doneCh := make(chan struct{})
  3. // Indicate to our routine to exit cleanly upon return.
  4. defer close(doneCh)
  5. isRecursive :=true
  6. objectCh := minioClient.ListObjects("mybucket","myprefix", isRecursive, doneCh)
  7. forobject:= range objectCh {
  8. ifobject.Err!=nil{
  9. fmt.Println(object.Err)
  10. return
  11. }
  12. fmt.Println(object)
  13. }

ListObjectsV2(bucketName, prefix string, recursive bool, doneCh chan struct{}) <-chan ObjectInfo

使用listing API v2版本列举存储桶中的对象。

参数

参数类型描述
bucketNamestring存储桶名称
objectPrefixstring要列举的对象前缀
recursivebooltrue代表递归查找,false代表类似文件夹查找,以'/'分隔,不查子文件夹。
doneChchan struct{}在该channel上结束ListObjects iterator的一个message。

返回值

参数类型描述
objectInfochan minio.ObjectInfo存储桶中所有对象的read channel
  1. // Create a done channel to control 'ListObjectsV2' go routine.
  2. doneCh := make(chan struct{})
  3. // Indicate to our routine to exit cleanly upon return.
  4. defer close(doneCh)
  5. isRecursive :=true
  6. objectCh := minioClient.ListObjectsV2("mybucket","myprefix", isRecursive, doneCh)
  7. forobject:= range objectCh {
  8. ifobject.Err!=nil{
  9. fmt.Println(object.Err)
  10. return
  11. }
  12. fmt.Println(object)
  13. }

ListIncompleteUploads(bucketName, prefix string, recursive bool, doneCh chan struct{}) <- chan ObjectMultipartInfo

列举存储桶中未完整上传的对象。

参数

参数类型描述
bucketNamestring存储桶名称
prefixstring不完整上传的对象的前缀
recursivebooltrue代表递归查找,false代表类似文件夹查找,以'/'分隔,不查子文件夹。
doneChchan struct{}在该channel上结束ListIncompleteUploads iterator的一个message。

返回值

参数类型描述
multiPartInfochan minio.ObjectMultipartInfomultipart对象格式如下:

minio.ObjectMultipartInfo

属性类型描述
multiPartObjInfo.Keystring未完整上传的对象的名称
multiPartObjInfo.UploadIDstring未完整上传的对象的Upload ID
multiPartObjInfo.Sizeint64未完整上传的对象的大小

示例

  1. // Create a done channel to control 'ListObjects' go routine.
  2. doneCh := make(chan struct{})
  3. // Indicate to our routine to exit cleanly upon return.
  4. defer close(doneCh)
  5. isRecursive :=true// Recursively list everything at 'myprefix'
  6. multiPartObjectCh := minioClient.ListIncompleteUploads("mybucket","myprefix", isRecursive, doneCh)
  7. for multiPartObject := range multiPartObjectCh {
  8. if multiPartObject.Err!=nil{
  9. fmt.Println(multiPartObject.Err)
  10. return
  11. }
  12. fmt.Println(multiPartObject)
  13. }

3. 操作对象

GetObject(bucketName, objectName string, opts GetObjectOptions) (*Object, error)

返回对象数据的流,error是读流时经常抛的那些错。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
optsminio.GetObjectOptionsGET请求的一些额外参数,像encryption,If-Match

minio.GetObjectOptions

参数类型描述
opts.Materialsencrypt.Materialsencrypt包提供的对流加密的接口,(更多信息,请看https://godoc.org/github.com/minio/minio-go)

返回值

参数类型描述
object*minio.Objectminio.Object代表了一个object reader。它实现了io.Reader, io.Seeker, io.ReaderAt and io.Closer接口。

示例

  1. object, err := minioClient.GetObject("mybucket","myobject", minio.GetObjectOptions{})
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }
  6. localFile, err := os.Create("/tmp/local-file.jpg")
  7. if err !=nil{
  8. fmt.Println(err)
  9. return
  10. }
  11. if _, err = io.Copy(localFile,object); err !=nil{
  12. fmt.Println(err)
  13. return
  14. }

FGetObject(bucketName, objectName, filePath string, opts GetObjectOptions) error

下载并将文件保存到本地文件系统。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
filePathstring下载后保存的路径
optsminio.GetObjectOptionsGET请求的一些额外参数,像encryption,If-Match

示例

  1. err = minioClient.FGetObject("mybucket","myobject","/tmp/myobject", minio.GetObjectOptions{})
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }

GetObjectWithContext(ctx context.Context, bucketName, objectName string, opts GetObjectOptions) (*Object, error)

和GetObject操作是一样的,不过传入了取消请求的context。

参数

参数类型描述
ctxcontext.Context请求上下文(Request context)
bucketNamestring存储桶名称
objectNamestring对象的名称
optsminio.GetObjectOptionsGET请求的一些额外参数,像encryption,If-Match

返回值

参数类型描述
object*minio.Objectminio.Object代表了一个object reader。它实现了io.Reader, io.Seeker, io.ReaderAt and io.Closer接口。

示例

  1. ctx, cancel := context.WithTimeout(context.Background(),100* time.Second)
  2. defer cancel()
  3. object, err := minioClient.GetObjectWithContext(ctx,"mybucket","myobject", minio.GetObjectOptions{})
  4. if err !=nil{
  5. fmt.Println(err)
  6. return
  7. }
  8. localFile, err := os.Create("/tmp/local-file.jpg")
  9. if err !=nil{
  10. fmt.Println(err)
  11. return
  12. }
  13. if _, err = io.Copy(localFile,object); err !=nil{
  14. fmt.Println(err)
  15. return
  16. }

FGetObjectWithContext(ctx context.Context, bucketName, objectName, filePath string, opts GetObjectOptions) error

和FGetObject操作是一样的,不过允许取消请求。

参数

参数类型描述
ctxcontext.Context请求上下文
bucketNamestring存储桶名称
objectNamestring对象的名称
filePathstring下载后保存的路径
optsminio.GetObjectOptionsGET请求的一些额外参数,像encryption,If-Match

示例

  1. ctx, cancel := context.WithTimeout(context.Background(),100* time.Second)
  2. defer cancel()
  3. err = minioClient.FGetObjectWithContext(ctx,"mybucket","myobject","/tmp/myobject", minio.GetObjectOptions{})
  4. if err !=nil{
  5. fmt.Println(err)
  6. return
  7. }

FGetEncryptedObject(bucketName, objectName, filePath string, materials encrypt.Materials) error

和FGetObject操作是一样的,不过会对加密请求进行解密。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
filePathstring下载后保存的路径
materialsencrypt.Materialsencrypt包提供的对流加密的接口,(更多信息,请看https://godoc.org/github.com/minio/minio-go)

示例

  1. // Generate a master symmetric key
  2. key := encrypt.NewSymmetricKey([]byte("my-secret-key-00"))
  3. // Build the CBC encryption material
  4. cbcMaterials, err := encrypt.NewCBCSecureMaterials(key)
  5. if err !=nil{
  6. fmt.Println(err)
  7. return
  8. }
  9. err = minioClient.FGetEncryptedObject("mybucket","myobject","/tmp/myobject", cbcMaterials)
  10. if err !=nil{
  11. fmt.Println(err)
  12. return
  13. }

PutObject(bucketName, objectName string, reader io.Reader, objectSize int64,opts PutObjectOptions) (n int, err error)

当对象小于64MiB时,直接在一次PUT请求里进行上传。当大于64MiB时,根据文件的实际大小,PutObject会自动地将对象进行拆分成64MiB一块或更大一些进行上传。对象的最大大小是5TB。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
readerio.Reader任意实现了io.Reader的GO类型
objectSizeint64上传的对象的大小,-1代表未知。
optsminio.PutObjectOptions允许用户设置可选的自定义元数据,内容标题,加密密钥和用于分段上传操作的线程数量。

minio.PutObjectOptions

属性类型描述
opts.UserMetadatamap[string]string用户元数据的Map
opts.Progressio.Reader获取上传进度的Reader
opts.ContentTypestring对象的Content type, 例如"application/text"
opts.ContentEncodingstring对象的Content encoding,例如"gzip"
opts.ContentDispositionstring对象的Content disposition, "inline"
opts.CacheControlstring指定针对请求和响应的缓存机制,例如"max-age=600"
opts.EncryptMaterialsencrypt.Materialsencrypt包提供的对流加密的接口,(更多信息,请看https://godoc.org/github.com/minio/minio-go)

示例

  1. file, err := os.Open("my-testfile")
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }
  6. defer file.Close()
  7. fileStat, err := file.Stat()
  8. if err !=nil{
  9. fmt.Println(err)
  10. return
  11. }
  12. n, err := minioClient.PutObject("mybucket","myobject", file, fileStat.Size(), minio.PutObjectOptions{ContentType:"application/octet-stream"})
  13. if err !=nil{
  14. fmt.Println(err)
  15. return
  16. }
  17. fmt.Println("Successfully uploaded bytes: ", n)

API方法在minio-go SDK版本v3.0.3中提供的PutObjectWithSize,PutObjectWithMetadata,PutObjectStreaming和PutObjectWithProgress被替换为接受指向PutObjectOptions struct的指针的新的PutObject调用变体。

PutObjectWithContext(ctx context.Context, bucketName, objectName string, reader io.Reader, objectSize int64, opts PutObjectOptions) (n int, err error)

和PutObject是一样的,不过允许取消请求。

参数

参数类型描述
ctxcontext.Context请求上下文
bucketNamestring存储桶名称
objectNamestring对象的名称
readerio.Reader任何实现io.Reader的Go类型
objectSizeint64上传的对象的大小,-1代表未知
optsminio.PutObjectOptions允许用户设置可选的自定义元数据,content-type,content-encoding,content-disposition以及cache-control headers,传递加密模块以加密对象,并可选地设置multipart put操作的线程数量。

示例

  1. ctx, cancel := context.WithTimeout(context.Background(),10* time.Second)
  2. defer cancel()
  3. file, err := os.Open("my-testfile")
  4. if err !=nil{
  5. fmt.Println(err)
  6. return
  7. }
  8. defer file.Close()
  9. fileStat, err := file.Stat()
  10. if err !=nil{
  11. fmt.Println(err)
  12. return
  13. }
  14. n, err := minioClient.PutObjectWithContext(ctx,"my-bucketname","my-objectname", file, fileStat.Size(), minio.PutObjectOptions{
  15. ContentType:"application/octet-stream",
  16. })
  17. if err !=nil{
  18. fmt.Println(err)
  19. return
  20. }
  21. fmt.Println("Successfully uploaded bytes: ", n)

CopyObject(dst DestinationInfo, src SourceInfo) error

通过在服务端对已存在的对象进行拷贝,实现新建或者替换对象。它支持有条件的拷贝,拷贝对象的一部分,以及在服务端的加解密。请查看SourceInfoDestinationInfo两个类型来了解更多细节。

拷贝多个源文件到一个目标对象,请查看ComposeObject API。

参数

参数类型描述
dstminio.DestinationInfo目标对象
srcminio.SourceInfo源对象

示例

  1. // Use-case 1: Simple copy object with no conditions.
  2. // Source object
  3. src := minio.NewSourceInfo("my-sourcebucketname","my-sourceobjectname",nil)
  4. // Destination object
  5. dst, err := minio.NewDestinationInfo("my-bucketname","my-objectname",nil,nil)
  6. if err !=nil{
  7. fmt.Println(err)
  8. return
  9. }
  10. // Copy object call
  11. err = minioClient.CopyObject(dst, src)
  12. if err !=nil{
  13. fmt.Println(err)
  14. return
  15. }
  1. // Use-case 2:
  2. // Copy object with copy-conditions, and copying only part of the source object.
  3. // 1. that matches a given ETag
  4. // 2. and modified after 1st April 2014
  5. // 3. but unmodified since 23rd April 2014
  6. // 4. copy only first 1MiB of object.
  7. // Source object
  8. src := minio.NewSourceInfo("my-sourcebucketname","my-sourceobjectname",nil)
  9. // Set matching ETag condition, copy object which matches the following ETag.
  10. src.SetMatchETagCond("31624deb84149d2f8ef9c385918b653a")
  11. // Set modified condition, copy object modified since 2014 April 1.
  12. src.SetModifiedSinceCond(time.Date(2014, time.April,1,0,0,0,0, time.UTC))
  13. // Set unmodified condition, copy object unmodified since 2014 April 23.
  14. src.SetUnmodifiedSinceCond(time.Date(2014, time.April,23,0,0,0,0, time.UTC))
  15. // Set copy-range of only first 1MiB of file.
  16. src.SetRange(0,1024*1024-1)
  17. // Destination object
  18. dst, err := minio.NewDestinationInfo("my-bucketname","my-objectname",nil,nil)
  19. if err !=nil{
  20. fmt.Println(err)
  21. return
  22. }
  23. // Copy object call
  24. err = minioClient.CopyObject(dst, src)
  25. if err !=nil{
  26. fmt.Println(err)
  27. return
  28. }

ComposeObject(dst minio.DestinationInfo, srcs []minio.SourceInfo) error

通过使用服务端拷贝实现钭多个源对象合并创建成一个新的对象。

参数

参数类型描述
dstminio.DestinationInfo要被创建的目标对象
srcs[]minio.SourceInfo要合并的多个源对象

示例

  1. // Prepare source decryption key (here we assume same key to
  2. // decrypt all source objects.)
  3. decKey := minio.NewSSEInfo([]byte{1,2,3},"")
  4. // Source objects to concatenate. We also specify decryption
  5. // key for each
  6. src1 := minio.NewSourceInfo("bucket1","object1",&decKey)
  7. src1.SetMatchETagCond("31624deb84149d2f8ef9c385918b653a")
  8. src2 := minio.NewSourceInfo("bucket2","object2",&decKey)
  9. src2.SetMatchETagCond("f8ef9c385918b653a31624deb84149d2")
  10. src3 := minio.NewSourceInfo("bucket3","object3",&decKey)
  11. src3.SetMatchETagCond("5918b653a31624deb84149d2f8ef9c38")
  12. // Create slice of sources.
  13. srcs :=[]minio.SourceInfo{src1, src2, src3}
  14. // Prepare destination encryption key
  15. encKey := minio.NewSSEInfo([]byte{8,9,0},"")
  16. // Create destination info
  17. dst, err := minio.NewDestinationInfo("bucket","object",&encKey,nil)
  18. if err !=nil{
  19. fmt.Println(err)
  20. return
  21. }
  22. // Compose object call by concatenating multiple source files.
  23. err = minioClient.ComposeObject(dst, srcs)
  24. if err !=nil{
  25. fmt.Println(err)
  26. return
  27. }
  28. fmt.Println("Composed object successfully.")

NewSourceInfo(bucket, object string, decryptSSEC *SSEInfo) SourceInfo

构建一个可用于服务端拷贝操作(像CopyObjectComposeObject)的SourceInfo对象。该对象可用于给源对象设置拷贝条件。

参数

参数类型描述
bucketstring源存储桶
objectstring源对象
decryptSSEC*minio.SSEInfo源对象的解密信息 (nil代表不用解密)

示例

  1. // No decryption parameter.
  2. src := minio.NewSourceInfo("bucket","object",nil)
  3. // Destination object
  4. dst, err := minio.NewDestinationInfo("my-bucketname","my-objectname",nil,nil)
  5. if err !=nil{
  6. fmt.Println(err)
  7. return
  8. }
  9. // Copy object call
  10. err = minioClient.CopyObject(dst, src)
  11. if err !=nil{
  12. fmt.Println(err)
  13. return
  14. }
  1. // With decryption parameter.
  2. decKey := minio.NewSSEInfo([]byte{1,2,3},"")
  3. src := minio.NewSourceInfo("bucket","object",&decKey)
  4. // Destination object
  5. dst, err := minio.NewDestinationInfo("my-bucketname","my-objectname",nil,nil)
  6. if err !=nil{
  7. fmt.Println(err)
  8. return
  9. }
  10. // Copy object call
  11. err = minioClient.CopyObject(dst, src)
  12. if err !=nil{
  13. fmt.Println(err)
  14. return
  15. }

NewDestinationInfo(bucket, object string, encryptSSEC *SSEInfo, userMeta map[string]string) (DestinationInfo, error)

构建一个用于服务端拷贝操作(像CopyObjectComposeObject)的用作目标对象的DestinationInfo

参数

参数类型描述
bucketstring目标存储桶名称
objectstring目标对象名称
encryptSSEC*minio.SSEInfo源对象的加密信息 (nil代表不用加密)
userMetamap[string]string给目标对象的用户元数据,如果是nil,并只有一个源对象,则将源对象的用户元数据拷贝给目标对象。

示例

  1. // No encryption parameter.
  2. src := minio.NewSourceInfo("bucket","object",nil)
  3. dst, err := minio.NewDestinationInfo("bucket","object",nil,nil)
  4. if err !=nil{
  5. fmt.Println(err)
  6. return
  7. }
  8. // Copy object call
  9. err = minioClient.CopyObject(dst, src)
  10. if err !=nil{
  11. fmt.Println(err)
  12. return
  13. }
  1. src := minio.NewSourceInfo("bucket","object",nil)
  2. // With encryption parameter.
  3. encKey := minio.NewSSEInfo([]byte{1,2,3},"")
  4. dst, err := minio.NewDestinationInfo("bucket","object",&encKey,nil)
  5. if err !=nil{
  6. fmt.Println(err)
  7. return
  8. }
  9. // Copy object call
  10. err = minioClient.CopyObject(dst, src)
  11. if err !=nil{
  12. fmt.Println(err)
  13. return
  14. }

FPutObject(bucketName, objectName, filePath, opts PutObjectOptions) (length int64, err error)

将filePath对应的文件内容上传到一个对象中。

当对象小于64MiB时,FPutObject直接在一次PUT请求里进行上传。当大于64MiB时,根据文件的实际大小,FPutObject会自动地将对象进行拆分成64MiB一块或更大一些进行上传。对象的最大大小是5TB。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
filePathstring要上传的文件的路径
optsminio.PutObjectOptions允许用户设置可选的自定义元数据,content-type,content-encoding,content-disposition以及cache-control headers,传递加密模块以加密对象,并可选地设置multipart put操作的线程数量。

示例

  1. n, err := minioClient.FPutObject("my-bucketname","my-objectname","my-filename.csv", minio.PutObjectOptions{
  2. ContentType:"application/csv",
  3. });
  4. if err !=nil{
  5. fmt.Println(err)
  6. return
  7. }
  8. fmt.Println("Successfully uploaded bytes: ", n)

FPutObjectWithContext(ctx context.Context, bucketName, objectName, filePath, opts PutObjectOptions) (length int64, err error)

和FPutObject操作是一样的,不过允许取消请求。

参数

参数类型描述
ctxcontext.Context请求上下文
bucketNamestring存储桶名称
objectNamestring对象的名称
filePathstring要上传的文件的路径
optsminio.PutObjectOptions允许用户设置可选的自定义元数据,content-type,content-encoding,content-disposition以及cache-control headers,传递加密模块以加密对象,并可选地设置multipart put操作的线程数量。

示例

  1. ctx, cancel := context.WithTimeout(context.Background(),100* time.Second)
  2. defer cancel()
  3. n, err := minioClient.FPutObjectWithContext(ctx,"mybucket","myobject.csv","/tmp/otherobject.csv", minio.PutObjectOptions{ContentType:"application/csv"})
  4. if err !=nil{
  5. fmt.Println(err)
  6. return
  7. }
  8. fmt.Println("Successfully uploaded bytes: ", n)

StatObject(bucketName, objectName string, opts StatObjectOptions) (ObjectInfo, error)

获取对象的元数据。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
optsminio.StatObjectOptionsGET info/stat请求的一些额外参数,像encryption,If-Match

返回值

参数类型描述
objInfominio.ObjectInfo对象stat信息

minio.ObjectInfo

属性类型描述
objInfo.LastModifiedtime.Time对象的最后修改时间
objInfo.ETagstring对象的MD5校验码
objInfo.ContentTypestring对象的Content type
objInfo.Sizeint64对象的大小

示例

  1. objInfo, err := minioClient.StatObject("mybucket","myobject", minio.StatObjectOptions{})
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }
  6. fmt.Println(objInfo)

RemoveObject(bucketName, objectName string) error

删除一个对象。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
  1. err = minioClient.RemoveObject("mybucket","myobject")
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }

RemoveObjects(bucketName string, objectsCh chan string) (errorCh <-chan RemoveObjectError)

从一个input channel里删除一个对象集合。一次发送到服务端的删除请求最多可删除1000个对象。通过error channel返回的错误信息。

参数

参数类型描述
bucketNamestring存储桶名称
objectsChchan string要删除的对象的channel

返回值

参数类型描述
errorCh<-chan minio.RemoveObjectError删除时观察到的错误的Receive-only channel。
  1. objectsCh := make(chan string)
  2. // Send object names that are needed to be removed to objectsCh
  3. go func(){
  4. defer close(objectsCh)
  5. // List all objects from a bucket-name with a matching prefix.
  6. forobject:= range minioClient.ListObjects("my-bucketname","my-prefixname",true,nil){
  7. ifobject.Err!=nil{
  8. log.Fatalln(object.Err)
  9. }
  10. objectsCh <-object.Key
  11. }
  12. }()
  13. for rErr := range minioClient.RemoveObjects("mybucket", objectsCh){
  14. fmt.Println("Error detected during deletion: ", rErr)
  15. }

RemoveIncompleteUpload(bucketName, objectName string) error

删除一个未完整上传的对象。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称

示例

  1. err = minioClient.RemoveIncompleteUpload("mybucket","myobject")
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }

4. 操作加密对象

NewSymmetricKey(key []byte) *encrypt.SymmetricKey

参数

参数类型描述
keystring存储桶名称

返回值

参数类型描述
symmetricKey*encrypt.SymmetricKey加密解密的对称秘钥
  1. symKey := encrypt.NewSymmetricKey([]byte("my-secret-key-00"))
  2. // Build the CBC encryption material with symmetric key.
  3. cbcMaterials, err := encrypt.NewCBCSecureMaterials(symKey)
  4. if err !=nil{
  5. fmt.Println(err)
  6. return
  7. }
  8. fmt.Println("Successfully initialized Symmetric key CBC materials", cbcMaterials)
  9. object, err := minioClient.GetEncryptedObject("mybucket","myobject", cbcMaterials)
  10. if err !=nil{
  11. fmt.Println(err)
  12. return
  13. }
  14. defer object.Close()

NewAsymmetricKey(privateKey []byte, publicKey[]byte) (*encrypt.AsymmetricKey, error)

参数

参数类型描述
privateKey[]bytePrivate key数据
publicKey[]bytePublic key数据

返回值

参数类型描述
asymmetricKey*encrypt.AsymmetricKey加密解密的非对称秘钥
errerror标准Error
  1. privateKey, err := ioutil.ReadFile("private.key")
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }
  6. publicKey, err := ioutil.ReadFile("public.key")
  7. if err !=nil{
  8. fmt.Println(err)
  9. return
  10. }
  11. // Initialize the asymmetric key
  12. asymmetricKey, err := encrypt.NewAsymmetricKey(privateKey, publicKey)
  13. if err !=nil{
  14. fmt.Println(err)
  15. return
  16. }
  17. // Build the CBC encryption material for asymmetric key.
  18. cbcMaterials, err := encrypt.NewCBCSecureMaterials(asymmetricKey)
  19. if err !=nil{
  20. fmt.Println(err)
  21. return
  22. }
  23. fmt.Println("Successfully initialized Asymmetric key CBC materials", cbcMaterials)
  24. object, err := minioClient.GetEncryptedObject("mybucket","myobject", cbcMaterials)
  25. if err !=nil{
  26. fmt.Println(err)
  27. return
  28. }
  29. defer object.Close()

GetEncryptedObject(bucketName, objectName string, encryptMaterials encrypt.Materials) (io.ReadCloser, error)

返回对象的解密流。读流时的常见错误。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
encryptMaterialsencrypt.Materialsencrypt包提供的对流加密的接口,(更多信息,请看https://godoc.org/github.com/minio/minio-go)

返回值

参数类型描述
streamio.ReadCloser返回对象的reader,调用者需要在读取之后进行关闭。
err_error错误信息

示例

  1. // Generate a master symmetric key
  2. key := encrypt.NewSymmetricKey([]byte("my-secret-key-00"))
  3. // Build the CBC encryption material
  4. cbcMaterials, err := encrypt.NewCBCSecureMaterials(key)
  5. if err !=nil{
  6. fmt.Println(err)
  7. return
  8. }
  9. object, err := minioClient.GetEncryptedObject("mybucket","myobject", cbcMaterials)
  10. if err !=nil{
  11. fmt.Println(err)
  12. return
  13. }
  14. defer object.Close()
  15. localFile, err := os.Create("/tmp/local-file.jpg")
  16. if err !=nil{
  17. fmt.Println(err)
  18. return
  19. }
  20. defer localFile.Close()
  21. if _, err = io.Copy(localFile,object); err !=nil{
  22. fmt.Println(err)
  23. return
  24. }

PutEncryptedObject(bucketName, objectName string, reader io.Reader, encryptMaterials encrypt.Materials) (n int, err error)

加密并上传对象。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
readerio.Reader任何实现io.Reader的Go类型
encryptMaterialsencrypt.Materialsencrypt包提供的对流加密的接口,(更多信息,请看https://godoc.org/github.com/minio/minio-go)

示例

  1. // Load a private key
  2. privateKey, err := ioutil.ReadFile("private.key")
  3. if err !=nil{
  4. fmt.Println(err)
  5. return
  6. }
  7. // Load a public key
  8. publicKey, err := ioutil.ReadFile("public.key")
  9. if err !=nil{
  10. fmt.Println(err)
  11. return
  12. }
  13. // Build an asymmetric key
  14. key, err := encrypt.NewAsymmetricKey(privateKey, publicKey)
  15. if err !=nil{
  16. fmt.Println(err)
  17. return
  18. }
  19. // Build the CBC encryption module
  20. cbcMaterials, err := encrypt.NewCBCSecureMaterials(key)
  21. if err !=nil{
  22. fmt.Println(err)
  23. return
  24. }
  25. // Open a file to upload
  26. file, err := os.Open("my-testfile")
  27. if err !=nil{
  28. fmt.Println(err)
  29. return
  30. }
  31. defer file.Close()
  32. // Upload the encrypted form of the file
  33. n, err := minioClient.PutEncryptedObject("mybucket","myobject", file, cbcMaterials)
  34. if err !=nil{
  35. fmt.Println(err)
  36. return
  37. }
  38. fmt.Println("Successfully uploaded encrypted bytes: ", n)

FPutEncryptedObject(bucketName, objectName, filePath, encryptMaterials encrypt.Materials) (n int, err error)

通过一个文件进行加密并上传到对象。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
filePathstring要上传的文件的路径
encryptMaterialsencrypt.Materialsencrypt包提供的对流加密的接口,(更多信息,请看https://godoc.org/github.com/minio/minio-go)

示例

  1. // Load a private key
  2. privateKey, err := ioutil.ReadFile("private.key")
  3. if err !=nil{
  4. fmt.Println(err)
  5. return
  6. }
  7. // Load a public key
  8. publicKey, err := ioutil.ReadFile("public.key")
  9. if err !=nil{
  10. fmt.Println(err)
  11. return
  12. }
  13. // Build an asymmetric key
  14. key, err := encrypt.NewAsymmetricKey(privateKey, publicKey)
  15. if err !=nil{
  16. fmt.Println(err)
  17. return
  18. }
  19. // Build the CBC encryption module
  20. cbcMaterials, err := encrypt.NewCBCSecureMaterials(key)
  21. if err !=nil{
  22. fmt.Println(err)
  23. return
  24. }
  25. n, err := minioClient.FPutEncryptedObject("mybucket","myobject.csv","/tmp/otherobject.csv", cbcMaterials)
  26. if err !=nil{
  27. fmt.Println(err)
  28. return
  29. }
  30. fmt.Println("Successfully uploaded encrypted bytes: ", n)

NewSSEInfo(key []byte, algo string) SSEInfo

创建一个通过用户提供的key(SSE-C),进行服务端加解密操作的key对象。

参数

参数类型描述
key[]byte未编码的二进制key数组
algostring加密算法,可以为空(默认是AES256

5. Presigned操作

PresignedGetObject(bucketName, objectName string, expiry time.Duration, reqParams url.Values) (*url.URL, error)

生成一个用于HTTP GET操作的presigned URL。浏览器/移动客户端可以在即使存储桶为私有的情况下也可以通过这个URL进行下载。这个presigned URL可以有一个过期时间,默认是7天。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
expirytime.Durationpresigned URL的过期时间,单位是秒
reqParamsurl.Values额外的响应头,支持response-expiresresponse-content-typeresponse-cache-controlresponse-content-disposition

示例

  1. // Set request parameters for content-disposition.
  2. reqParams := make(url.Values)
  3. reqParams.Set("response-content-disposition","attachment; filename=\"your-filename.txt\"")
  4. // Generates a presigned url which expires in a day.
  5. presignedURL, err := minioClient.PresignedGetObject("mybucket","myobject", time.Second*24*60*60, reqParams)
  6. if err !=nil{
  7. fmt.Println(err)
  8. return
  9. }
  10. fmt.Println("Successfully generated presigned URL", presignedURL)

PresignedPutObject(bucketName, objectName string, expiry time.Duration) (*url.URL, error)

生成一个用于HTTP GET操作的presigned URL。浏览器/移动客户端可以在即使存储桶为私有的情况下也可以通过这个URL进行下载。这个presigned URL可以有一个过期时间,默认是7天。

注意:你可以通过只指定对象名称上传到S3。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
expirytime.Durationpresigned URL的过期时间,单位是秒

示例

  1. // Generates a url which expires in a day.
  2. expiry := time.Second*24*60*60// 1 day.
  3. presignedURL, err := minioClient.PresignedPutObject("mybucket","myobject", expiry)
  4. if err !=nil{
  5. fmt.Println(err)
  6. return
  7. }
  8. fmt.Println("Successfully generated presigned URL", presignedURL)

PresignedHeadObject(bucketName, objectName string, expiry time.Duration, reqParams url.Values) (*url.URL, error)

生成一个用于HTTP GET操作的presigned URL。浏览器/移动客户端可以在即使存储桶为私有的情况下也可以通过这个URL进行下载。这个presigned URL可以有一个过期时间,默认是7天。

参数

参数类型描述
bucketNamestring存储桶名称
objectNamestring对象的名称
expirytime.Durationpresigned URL的过期时间,单位是秒
reqParamsurl.Values额外的响应头,支持response-expiresresponse-content-typeresponse-cache-controlresponse-content-disposition

示例

  1. // Set request parameters for content-disposition.
  2. reqParams := make(url.Values)
  3. reqParams.Set("response-content-disposition","attachment; filename=\"your-filename.txt\"")
  4. // Generates a presigned url which expires in a day.
  5. presignedURL, err := minioClient.PresignedHeadObject("mybucket","myobject", time.Second*24*60*60, reqParams)
  6. if err !=nil{
  7. fmt.Println(err)
  8. return
  9. }
  10. fmt.Println("Successfully generated presigned URL", presignedURL)

PresignedPostPolicy(PostPolicy) (*url.URL, map[string]string, error)

允许给POST操作的presigned URL设置策略条件。这些策略包括比如,接收对象上传的存储桶名称,名称前缀,过期策略。

  1. // Initialize policy condition config.
  2. policy := minio.NewPostPolicy()
  3. // Apply upload policy restrictions:
  4. policy.SetBucket("mybucket")
  5. policy.SetKey("myobject")
  6. policy.SetExpires(time.Now().UTC().AddDate(0,0,10))// expires in 10 days
  7. // Only allow 'png' images.
  8. policy.SetContentType("image/png")
  9. // Only allow content size in range 1KB to 1MB.
  10. policy.SetContentLengthRange(1024,1024*1024)
  11. // Add a user metadata using the key "custom" and value "user"
  12. policy.SetUserMetadata("custom","user")
  13. // Get the POST form key/value object:
  14. url, formData, err := minioClient.PresignedPostPolicy(policy)
  15. if err !=nil{
  16. fmt.Println(err)
  17. return
  18. }
  19. // POST your content from the command line using `curl`
  20. fmt.Printf("curl ")
  21. for k, v := range formData {
  22. fmt.Printf("-F %s=%s ", k, v)
  23. }
  24. fmt.Printf("-F file=@/etc/bash.bashrc ")
  25. fmt.Printf("%s\n", url)

6. 存储桶策略/通知

SetBucketPolicy(bucketname, objectPrefix string, policy policy.BucketPolicy) error

给存储桶或者对象前缀设置访问权限。

必须引入github.com/minio/minio-go/pkg/policy包。

参数

参数类型描述
bucketNamestring存储桶名称
objectPrefixstring对象的名称前缀
policypolicy.BucketPolicyPolicy的取值如下:
policy.BucketPolicyNone
policy.BucketPolicyReadOnly
policy.BucketPolicyReadWrite
policy.BucketPolicyWriteOnly

返回值

参数类型描述
errerror标准Error

示例

  1. // Sets 'mybucket' with a sub-directory 'myprefix' to be anonymously accessible for
  2. // both read and write operations.
  3. err = minioClient.SetBucketPolicy("mybucket","myprefix", policy.BucketPolicyReadWrite)
  4. if err !=nil{
  5. fmt.Println(err)
  6. return
  7. }

GetBucketPolicy(bucketName, objectPrefix string) (policy.BucketPolicy, error)

获取存储桶或者对象前缀的访问权限。

必须引入github.com/minio/minio-go/pkg/policy包。

参数

参数类型描述
bucketNamestring存储桶名称
objectPrefixstring该存储桶下的对象前缀

返回值

参数类型描述
bucketPolicypolicy.BucketPolicy取值如下: none, readonly, readwrite,或者writeonly
errerror标准Error

示例

  1. bucketPolicy, err := minioClient.GetBucketPolicy("mybucket","")
  2. if err !=nil{
  3. fmt.Println(err)
  4. return
  5. }
  6. fmt.Println("Access permissions for mybucket is", bucketPolicy)

GetBucketNotification(bucketName string) (BucketNotification, error)

获取存储桶的通知配置

参数

参数类型描述
bucketNamestring存储桶名称

返回值

参数类型描述
bucketNotificationminio.BucketNotification含有所有通知配置的数据结构
errerror标准Error

示例

  1. bucketNotification, err := minioClient.GetBucketNotification("mybucket")
  2. if err !=nil{
  3. fmt.Println("Failed to get bucket notification configurations for mybucket", err)
  4. return
  5. }
  6. for _, queueConfig := range bucketNotification.QueueConfigs{
  7. for _, e := range queueConfig.Events{
  8. fmt.Println(e +" event is enabled")
  9. }
  10. }

SetBucketNotification(bucketName string, bucketNotification BucketNotification) error

给存储桶设置新的通知

参数

参数类型描述
bucketNamestring存储桶名称
bucketNotificationminio.BucketNotification发送给配置的web service的XML

返回值

参数类型描述
errerror标准Error

示例

  1. queueArn := minio.NewArn("aws","sqs","us-east-1","804605494417","PhotoUpdate")
  2. queueConfig := minio.NewNotificationConfig(queueArn)
  3. queueConfig.AddEvents(minio.ObjectCreatedAll, minio.ObjectRemovedAll)
  4. queueConfig.AddFilterPrefix("photos/")
  5. queueConfig.AddFilterSuffix(".jpg")
  6. bucketNotification := minio.BucketNotification{}
  7. bucketNotification.AddQueue(queueConfig)
  8. err = minioClient.SetBucketNotification("mybucket", bucketNotification)
  9. if err !=nil{
  10. fmt.Println("Unable to set the bucket notification: ", err)
  11. return
  12. }

RemoveAllBucketNotification(bucketName string) error

删除存储桶上所有配置的通知

参数

参数类型描述
bucketNamestring存储桶名称

返回值

参数类型描述
errerror标准Error

示例

  1. err = minioClient.RemoveAllBucketNotification("mybucket")
  2. if err !=nil{
  3. fmt.Println("Unable to remove bucket notifications.", err)
  4. return
  5. }

ListenBucketNotification(bucketName, prefix, suffix string, events []string, doneCh <-chan struct{}) <-chan NotificationInfo

ListenBucketNotification API通过notification channel接收存储桶通知事件。返回的notification channel有两个属性,'Records'和'Err'。

  • 'Records'持有从服务器返回的通知信息。
  • 'Err'表示的是处理接收到的通知时报的任何错误。
    注意:一旦报错,notification channel就会关闭。

参数

参数类型描述
bucketNamestring被监听通知的存储桶
prefixstring过滤通知的对象前缀
suffixstring过滤通知的对象后缀
events[]string开启指定事件类型的通知
doneChchan struct{}在该channel上结束ListenBucketNotification iterator的一个message。

返回值

参数类型描述
notificationInfochan minio.NotificationInfo存储桶通知的channel

minio.NotificationInfo

|属性 |类型 |描述 ||notificationInfo.Records | []minio.NotificationEvent | 通知事件的集合 ||notificationInfo.Err | error | 操作时报的任何错误(标准Error) |

示例

  1. // Create a done channel to control 'ListenBucketNotification' go routine.
  2. doneCh := make(chan struct{})
  3. // Indicate a background go-routine to exit cleanly upon return.
  4. defer close(doneCh)
  5. // Listen for bucket notifications on "mybucket" filtered by prefix, suffix and events.
  6. for notificationInfo := range minioClient.ListenBucketNotification("mybucket","myprefix/",".mysuffix",[]string{
  7. "s3:ObjectCreated:*",
  8. "s3:ObjectAccessed:*",
  9. "s3:ObjectRemoved:*",
  10. }, doneCh){
  11. if notificationInfo.Err!=nil{
  12. fmt.Println(notificationInfo.Err)
  13. }
  14. fmt.Println(notificationInfo)
  15. }

7. 客户端自定义设置

SetAppInfo(appName, appVersion string)

给User-Agent添加的自定义应用信息。

参数

参数类型描述
appNamestring发请求的应用名称
appVersionstring发请求的应用版本

示例

  1. // Set Application name and version to be used in subsequent API requests.
  2. minioClient.SetAppInfo("myCloudApp","1.0.0")

SetCustomTransport(customHTTPTransport http.RoundTripper)

重写默认的HTTP transport,通常用于调试或者添加自定义的TLS证书。

参数

参数类型描述
customHTTPTransporthttp.RoundTripper自定义的transport,例如:为了调试对API请求响应进行追踪。

TraceOn(outputStream io.Writer)

开启HTTP tracing。追踪信息输出到io.Writer,如果outputstream为nil,则trace写入到os.Stdout标准输出。

参数

参数类型描述
outputStreamio.WriterHTTP trace写入到outputStream

TraceOff()

关闭HTTP tracing。

SetS3TransferAccelerate(acceleratedEndpoint string)

给后续所有API请求设置ASW S3传输加速endpoint。注意:此API仅对AWS S3有效,对其它S3兼容的对象存储服务不生效。

参数

参数类型描述
acceleratedEndpointstring设置新的S3传输加速endpoint。

8. 了解更多

原文: https://docs.minio.io/cn/golang-client-api-reference.html