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操作 存储桶策略/通知 客户端自定义设置

1. 构造函数

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

初使化一个新的client对象。

参数

endpointaccessKeyIDsecretAccessKeyssl

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

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

参数

endpointaccessKeyIDsecretAccessKeysslregion

2. 操作存储桶

MakeBucket(bucketName, location string) error

创建一个存储桶。

参数

bucketNamelocation

示例

  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

bucket.Namebucket.CreationDate

示例

  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)

检查存储桶是否存在。

参数

bucketName

返回值

founderr

示例

  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

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

参数

bucketName

示例

  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

列举存储桶里的对象。

参数

bucketNameobjectPrefixrecursivetruefalsedoneCh

返回值

objectInfo

minio.ObjectInfo

objectInfo.KeyobjectInfo.SizeobjectInfo.ETagobjectInfo.LastModified
  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. for object := range objectCh {
  8. if object.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版本列举存储桶中的对象。

参数

bucketNameobjectPrefixrecursivetruefalsedoneCh

返回值

objectInfo
  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. for object := range objectCh {
  8. if object.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

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

参数

bucketNameprefixrecursivetruefalsedoneCh

返回值

multiPartInfo

minio.ObjectMultipartInfo

multiPartObjInfo.KeymultiPartObjInfo.UploadIDmultiPartObjInfo.Size

示例

  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是读流时经常抛的那些错。

参数

bucketNameobjectNameopts

minio.GetObjectOptions

opts.Materialsencrypt

返回值

object

示例

  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

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

参数

bucketNameobjectNamefilePathopts

示例

  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。

参数

ctxbucketNameobjectNameopts

返回值

object

示例

  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操作是一样的,不过允许取消请求。

参数

ctxbucketNameobjectNamefilePathopts

示例

  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操作是一样的,不过会对加密请求进行解密。

参数

bucketNameobjectNamefilePathmaterialsencrypt

示例

  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。

参数

bucketNameobjectNamereaderobjectSizeopts

minio.PutObjectOptions

opts.UserMetadataopts.Progressopts.ContentTypeopts.ContentEncodingopts.ContentDispositionopts.CacheControlopts.EncryptMaterialsencrypt

示例

  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是一样的,不过允许取消请求。

参数

ctxbucketNameobjectNamereaderobjectSizeopts

示例

  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

参数

dstsrc

示例

  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

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

参数

dstsrcs

示例

  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

CopyObjectComposeObjectSourceInfo

参数

bucketobjectdecryptSSECnil

示例

  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)

CopyObjectComposeObjectDestinationInfo

参数

bucketobjectencryptSSECniluserMeta

示例

  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。

参数

bucketNameobjectNamefilePathopts

示例

  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操作是一样的,不过允许取消请求。

参数

ctxbucketNameobjectNamefilePathopts

示例

  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)

获取对象的元数据。

参数

bucketNameobjectNameopts

返回值

objInfo

minio.ObjectInfo

objInfo.LastModifiedobjInfo.ETagobjInfo.ContentTypeobjInfo.Size

示例

  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

删除一个对象。

参数

bucketNameobjectName
  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返回的错误信息。

参数

bucketNameobjectsCh

返回值

errorCh
  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. for object := range minioClient.ListObjects("my-bucketname", "my-prefixname", true, nil) {
  7. if object.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

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

参数

bucketNameobjectName

示例

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

4. 操作加密对象

NewSymmetricKey(key []byte) *encrypt.SymmetricKey

参数

key

返回值

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)

参数

privateKeypublicKey

返回值

asymmetricKeyerr
  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)

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

参数

bucketNameobjectNameencryptMaterialsencrypt

返回值

streamerr

示例

  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)

加密并上传对象。

参数

bucketNameobjectNamereaderencryptMaterialsencrypt

示例

  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)

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

参数

bucketNameobjectNamefilePathencryptMaterialsencrypt

示例

  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对象。

参数

keyalgoAES256

5. Presigned操作

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

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

参数

bucketNameobjectNameexpiryreqParams

示例

  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。

参数

bucketNameobjectNameexpiry

示例

  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天。

参数

bucketNameobjectNameexpiryreqParams

示例

  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

参数

bucketNameobjectPrefixpolicy

返回值

err

示例

  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

参数

bucketNameobjectPrefix

返回值

bucketPolicynonereadonlyreadwritewriteonlyerr

示例

  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)

获取存储桶的通知配置

参数

bucketName

返回值

bucketNotificationerr

示例

  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

给存储桶设置新的通知

参数

bucketNamebucketNotification

返回值

err

示例

  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

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

参数

bucketName

返回值

err

示例

  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就会关闭。

参数

bucketNameprefixsuffixeventsdoneCh

返回值

notificationInfo

minio.NotificationInfo

notificationInfo.RecordsnotificationInfo.Err

示例

  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添加的自定义应用信息。

参数

appNameappVersion

示例

  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证书。

参数

customHTTPTransport

TraceOn(outputStream io.Writer)

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

参数

outputStream

TraceOff()

关闭HTTP tracing。

SetS3TransferAccelerate(acceleratedEndpoint string)

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

参数

acceleratedEndpoint