Minio Go Client API Reference Slack

Initialize Minio Client object.

Minio

package main

import (
    "fmt"

    "github.com/minio/minio-go"
)

func main() {
        // Use a secure connection.
        ssl := true

        // Initialize minio client object.
        minioClient, err := minio.New("play.minio.io:9000", "Q3AM3UQ867SPQQA43P2F", "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG", ssl)
        if err != nil {
                fmt.Println(err)
                return
        }
}

AWS S3

package main

import (
    "fmt"

    "github.com/minio/minio-go"
)

func main() {
        // Use a secure connection.
        ssl := true

        // Initialize minio client object.
        s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY", ssl)
        if err != nil {
                fmt.Println(err)
                return
        }
}
Bucket operations Object operations Encrypted Object operations Presigned operations Bucket Policy/Notification Operations Client custom settings
MakeBucket GetObject GetObject PresignedGetObject SetBucketPolicy SetAppInfo
ListBuckets PutObject PutObject PresignedPutObject GetBucketPolicy SetCustomTransport
BucketExists CopyObject CopyObject PresignedPostPolicy SetBucketNotification TraceOn
RemoveBucket StatObject StatObject GetBucketNotification TraceOff
ListObjects RemoveObject RemoveAllBucketNotification SetS3TransferAccelerate
ListObjectsV2 RemoveObjects ListenBucketNotification
ListIncompleteUploads RemoveIncompleteUpload SetBucketLifecycle
FPutObject FPutObject GetBucketLifecycle
FGetObject FGetObject
ComposeObject ComposeObject
NewSourceInfo NewSourceInfo
NewDestinationInfo NewDestinationInfo
PutObjectWithContext PutObjectWithContext
GetObjectWithContext GetObjectWithContext
FPutObjectWithContext FPutObjectWithContext
FGetObjectWithContext FGetObjectWithContext
RemoveObjectsWithContext
SelectObjectContent

1. Constructor

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

Initializes a new client object.

Parameters

Param Type Description
endpoint string S3 compatible object storage endpoint
accessKeyID string Access key for the object storage
secretAccessKey string Secret key for the object storage
ssl bool If 'true' API requests will be secure (HTTPS), and insecure (HTTP) otherwise

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

Initializes minio client, with region configured. Unlike New(), NewWithRegion avoids bucket-location lookup operations and it is slightly faster. Use this function when your application deals with a single region.

NewWithOptions(endpoint string, options Options) (Client, error)

Initializes minio client with options configured.

Parameters

Param Type Description
endpoint string S3 compatible object storage endpoint
opts minio.Options Options for constructing a new client

minio.Options

Field Type Description
opts.Creds *credentials.Credentials Access Credentials
opts.Secure bool If 'true' API requests will be secure (HTTPS), and insecure (HTTP) otherwise
opts.Region string region
opts.BucketLookup BucketLookupType Bucket lookup type can be one of the following values
minio.BucketLookupDNS
minio.BucketLookupPath
minio.BucketLookupAuto

2. Bucket operations

MakeBucket(bucketName, location string) error

Creates a new bucket.

Parameters

Param Type Description
bucketName string Name of the bucket
location string Region where the bucket is to be created. Default value is us-east-1. Other valid values are listed below. Note: When used with minio server, use the region specified in its config file (defaults to 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

Example

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

ListBuckets() ([]BucketInfo, error)

Lists all buckets.

Param Type Description
bucketList []minio.BucketInfo Lists of all buckets

minio.BucketInfo

Field Type Description
bucket.Name string Name of the bucket
bucket.CreationDate time.Time Date of bucket creation

Example

buckets, err := minioClient.ListBuckets()
if err != nil {
    fmt.Println(err)
    return
}
for _, bucket := range buckets {
    fmt.Println(bucket)
}

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

Checks if a bucket exists.

Parameters

Param Type Description
bucketName string Name of the bucket

Return Values

Param Type Description
found bool Indicates whether bucket exists or not
err error Standard Error

Example

found, err := minioClient.BucketExists("mybucket")
if err != nil {
    fmt.Println(err)
    return
}
if found {
    fmt.Println("Bucket found")
}

RemoveBucket(bucketName string) error

Removes a bucket, bucket should be empty to be successfully removed.

Parameters

Param Type Description
bucketName string Name of the bucket

Example

err = minioClient.RemoveBucket("mybucket")
if err != nil {
    fmt.Println(err)
    return
}

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

Lists objects in a bucket.

Parameters

Param Type Description
bucketName string Name of the bucket
objectPrefix string Prefix of objects to be listed
recursive bool true indicates recursive style listing and false indicates directory style listing delimited by '/'.
doneCh chan struct{} A message on this channel ends the ListObjects iterator.

Return Value

Param Type Description
objectInfo chan minio.ObjectInfo Read channel for all objects in the bucket, the object is of the format listed below:

minio.ObjectInfo

Field Type Description
objectInfo.Key string Name of the object
objectInfo.Size int64 Size of the object
objectInfo.ETag string MD5 checksum of the object
objectInfo.LastModified time.Time Time when object was last modified
// Create a done channel to control 'ListObjects' go routine.
doneCh := make(chan struct{})

// Indicate to our routine to exit cleanly upon return.
defer close(doneCh)

isRecursive := true
objectCh := minioClient.ListObjects("mybucket", "myprefix", isRecursive, doneCh)
for object := range objectCh {
    if object.Err != nil {
        fmt.Println(object.Err)
        return
    }
    fmt.Println(object)
}

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

Lists objects in a bucket using the recommended listing API v2

Parameters

Param Type Description
bucketName string Name of the bucket
objectPrefix string Prefix of objects to be listed
recursive bool true indicates recursive style listing and false indicates directory style listing delimited by '/'.
doneCh chan struct{} A message on this channel ends the ListObjectsV2 iterator.

Return Value

Param Type Description
objectInfo chan minio.ObjectInfo Read channel for all the objects in the bucket, the object is of the format listed below:
// Create a done channel to control 'ListObjectsV2' go routine.
doneCh := make(chan struct{})

// Indicate to our routine to exit cleanly upon return.
defer close(doneCh)

isRecursive := true
objectCh := minioClient.ListObjectsV2("mybucket", "myprefix", isRecursive, doneCh)
for object := range objectCh {
    if object.Err != nil {
        fmt.Println(object.Err)
        return
    }
    fmt.Println(object)
}

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

Lists partially uploaded objects in a bucket.

Parameters

Param Type Description
bucketName string Name of the bucket
prefix string Prefix of objects that are partially uploaded
recursive bool true indicates recursive style listing and false indicates directory style listing delimited by '/'.
doneCh chan struct{} A message on this channel ends the ListenIncompleteUploads iterator.

Return Value

Param Type Description
multiPartInfo chan minio.ObjectMultipartInfo Emits multipart objects of the format listed below:

minio.ObjectMultipartInfo

Field Type Description
multiPartObjInfo.Key string Name of incompletely uploaded object
multiPartObjInfo.UploadID string Upload ID of incompletely uploaded object
multiPartObjInfo.Size int64 Size of incompletely uploaded object

Example

// Create a done channel to control 'ListObjects' go routine.
doneCh := make(chan struct{})

// Indicate to our routine to exit cleanly upon return.
defer close(doneCh)

isRecursive := true // Recursively list everything at 'myprefix'
multiPartObjectCh := minioClient.ListIncompleteUploads("mybucket", "myprefix", isRecursive, doneCh)
for multiPartObject := range multiPartObjectCh {
    if multiPartObject.Err != nil {
        fmt.Println(multiPartObject.Err)
        return
    }
    fmt.Println(multiPartObject)
}

3. Object operations

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

Returns a stream of the object data. Most of the common errors occur when reading the stream.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object
opts minio.GetObjectOptions Options for GET requests specifying additional options like encryption, If-Match

minio.GetObjectOptions

Field Type Description
opts.ServerSideEncryption encrypt.ServerSide Interface provided by encrypt package to specify server-side-encryption. (For more information see https://godoc.org/github.com/minio/minio-go)

Return Value

Param Type Description
object *minio.Object minio.Object represents object reader. It implements io.Reader, io.Seeker, io.ReaderAt and io.Closer interfaces.

Example

object, err := minioClient.GetObject("mybucket", "myobject", minio.GetObjectOptions{})
if err != nil {
    fmt.Println(err)
    return
}
localFile, err := os.Create("/tmp/local-file.jpg")
if err != nil {
    fmt.Println(err)
    return
}
if _, err = io.Copy(localFile, object); err != nil {
    fmt.Println(err)
    return
}

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

Downloads and saves the object as a file in the local filesystem.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object
filePath string Path to download object to
opts minio.GetObjectOptions Options for GET requests specifying additional options like encryption, If-Match

Example

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

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

Identical to GetObject operation, but accepts a context for request cancellation.

Parameters

Param Type Description
ctx context.Context Request context
bucketName string Name of the bucket
objectName string Name of the object
opts minio.GetObjectOptions Options for GET requests specifying additional options like encryption, If-Match

Return Value

Param Type Description
object *minio.Object minio.Object represents object reader. It implements io.Reader, io.Seeker, io.ReaderAt and io.Closer interfaces.

Example

ctx, cancel := context.WithTimeout(context.Background(), 100 * time.Second)
defer cancel()

object, err := minioClient.GetObjectWithContext(ctx, "mybucket", "myobject", minio.GetObjectOptions{})
if err != nil {
    fmt.Println(err)
    return
}

localFile, err := os.Create("/tmp/local-file.jpg")
if err != nil {
    fmt.Println(err)
    return
}

if _, err = io.Copy(localFile, object); err != nil {
    fmt.Println(err)
    return
}

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

Identical to FGetObject operation, but allows request cancellation.

Parameters

Param Type Description
ctx context.Context Request context
bucketName string Name of the bucket
objectName string Name of the object
filePath string Path to download object to
opts minio.GetObjectOptions Options for GET requests specifying additional options like encryption, If-Match

Example

ctx, cancel := context.WithTimeout(context.Background(), 100 * time.Second)
defer cancel()

err = minioClient.FGetObjectWithContext(ctx, "mybucket", "myobject", "/tmp/myobject", minio.GetObjectOptions{})
if err != nil {
    fmt.Println(err)
    return
}

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

Uploads objects that are less than 64MiB in a single PUT operation. For objects that are greater than 64MiB in size, PutObject seamlessly uploads the object as parts of 64MiB or more depending on the actual file size. The max upload size for an object is 5TB.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object
reader io.Reader Any Go type that implements io.Reader
objectSize int64 Size of the object being uploaded. Pass -1 if stream size is unknown
opts minio.PutObjectOptions Allows user to set optional custom metadata, content headers, encryption keys and number of threads for multipart upload operation.

minio.PutObjectOptions

Field Type Description
opts.UserMetadata map[string]string Map of user metadata
opts.Progress io.Reader Reader to fetch progress of an upload
opts.ContentType string Content type of object, e.g "application/text"
opts.ContentEncoding string Content encoding of object, e.g "gzip"
opts.ContentDisposition string Content disposition of object, "inline"
opts.ContentLanguage string Content language of object, e.g "French"
opts.CacheControl string Used to specify directives for caching mechanisms in both requests and responses e.g "max-age=600"
opts.ServerSideEncryption encrypt.ServerSide Interface provided by encrypt package to specify server-side-encryption. (For more information see https://godoc.org/github.com/minio/minio-go)
opts.StorageClass string Specify storage class for the object. Supported values for Minio server are REDUCED_REDUNDANCY and STANDARD
opts.WebsiteRedirectLocation string Specify a redirect for the object, to another object in the same bucket or to a external URL.

Example

file, err := os.Open("my-testfile")
if err != nil {
    fmt.Println(err)
    return
}
defer file.Close()

fileStat, err := file.Stat()
if err != nil {
    fmt.Println(err)
    return
}

n, err := minioClient.PutObject("mybucket", "myobject", file, fileStat.Size(), minio.PutObjectOptions{ContentType:"application/octet-stream"})
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Successfully uploaded bytes: ", n)

API methods PutObjectWithSize, PutObjectWithMetadata, PutObjectStreaming, and PutObjectWithProgress available in minio-go SDK release v3.0.3 are replaced by the new PutObject call variant that accepts a pointer to PutObjectOptions struct.

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

Identical to PutObject operation, but allows request cancellation.

Parameters

Param Type Description
ctx context.Context Request context
bucketName string Name of the bucket
objectName string Name of the object
reader io.Reader Any Go type that implements io.Reader
objectSize int64 size of the object being uploaded. Pass -1 if stream size is unknown
opts minio.PutObjectOptions Pointer to struct that allows user to set optional custom metadata, content-type, content-encoding, content-disposition, content-language and cache-control headers, pass encryption module for encrypting objects, and optionally configure number of threads for multipart put operation.

Example

ctx, cancel := context.WithTimeout(context.Background(), 10 * time.Second)
defer cancel()

file, err := os.Open("my-testfile")
if err != nil {
    fmt.Println(err)
    return
}
defer file.Close()

fileStat, err := file.Stat()
if err != nil {
    fmt.Println(err)
    return
}

n, err := minioClient.PutObjectWithContext(ctx, "my-bucketname", "my-objectname", file, fileStat.Size(), minio.PutObjectOptions{
    ContentType: "application/octet-stream",
})
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Successfully uploaded bytes: ", n)

CopyObject(dst DestinationInfo, src SourceInfo) error

Create or replace an object through server-side copying of an existing object. It supports conditional copying, copying a part of an object and server-side encryption of destination and decryption of source. See the SourceInfo and DestinationInfo types for further details.

To copy multiple source objects into a single destination object see the ComposeObject API.

Parameters

Param Type Description
dst minio.DestinationInfo Argument describing the destination object
src minio.SourceInfo Argument describing the source object

Example

// Use-case 1: Simple copy object with no conditions.
// Source object
src := minio.NewSourceInfo("my-sourcebucketname", "my-sourceobjectname", nil)

// Destination object
dst, err := minio.NewDestinationInfo("my-bucketname", "my-objectname", nil, nil)
if err != nil {
    fmt.Println(err)
    return
}

// Copy object call
err = minioClient.CopyObject(dst, src)
if err != nil {
    fmt.Println(err)
    return
}
// Use-case 2:
// Copy object with copy-conditions, and copying only part of the source object.
// 1. that matches a given ETag
// 2. and modified after 1st April 2014
// 3. but unmodified since 23rd April 2014
// 4. copy only first 1MiB of object.

// Source object
src := minio.NewSourceInfo("my-sourcebucketname", "my-sourceobjectname", nil)

// Set matching ETag condition, copy object which matches the following ETag.
src.SetMatchETagCond("31624deb84149d2f8ef9c385918b653a")

// Set modified condition, copy object modified since 2014 April 1.
src.SetModifiedSinceCond(time.Date(2014, time.April, 1, 0, 0, 0, 0, time.UTC))

// Set unmodified condition, copy object unmodified since 2014 April 23.
src.SetUnmodifiedSinceCond(time.Date(2014, time.April, 23, 0, 0, 0, 0, time.UTC))

// Set copy-range of only first 1MiB of file.
src.SetRange(0, 1024*1024-1)

// Destination object
dst, err := minio.NewDestinationInfo("my-bucketname", "my-objectname", nil, nil)
if err != nil {
    fmt.Println(err)
    return
}

// Copy object call
err = minioClient.CopyObject(dst, src)
if err != nil {
    fmt.Println(err)
    return
}

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

Create an object by concatenating a list of source objects using server-side copying.

Parameters

Param Type Description
dst minio.DestinationInfo Struct with info about the object to be created.
srcs []minio.SourceInfo Slice of struct with info about source objects to be concatenated in order.

Example

// Prepare source decryption key (here we assume same key to
// decrypt all source objects.)
sseSrc := encrypt.DefaultPBKDF([]byte("password"), []byte("salt"))

// Source objects to concatenate. We also specify decryption
// key for each
src1 := minio.NewSourceInfo("bucket1", "object1", sseSrc)
src1.SetMatchETagCond("31624deb84149d2f8ef9c385918b653a")

src2 := minio.NewSourceInfo("bucket2", "object2", sseSrc)
src2.SetMatchETagCond("f8ef9c385918b653a31624deb84149d2")

src3 := minio.NewSourceInfo("bucket3", "object3", sseSrc)
src3.SetMatchETagCond("5918b653a31624deb84149d2f8ef9c38")

// Create slice of sources.
srcs := []minio.SourceInfo{src1, src2, src3}

// Prepare destination encryption key
sseDst := encrypt.DefaultPBKDF([]byte("new-password"), []byte("new-salt"))

// Create destination info
dst, err := minio.NewDestinationInfo("bucket", "object", sseDst, nil)
if err != nil {
    fmt.Println(err)
    return
}

// Compose object call by concatenating multiple source files.
err = minioClient.ComposeObject(dst, srcs)
if err != nil {
    fmt.Println(err)
    return
}

fmt.Println("Composed object successfully.")

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

Construct a SourceInfo object that can be used as the source for server-side copying operations like CopyObject and ComposeObject. This object can be used to set copy-conditions on the source.

Parameters

Param Type Description
bucket string Name of the source bucket
object string Name of the source object
sse *encrypt.ServerSide Interface provided by encrypt package to specify server-side-encryption. (For more information see https://godoc.org/github.com/minio/minio-go)

Example

// No decryption parameter.
src := minio.NewSourceInfo("bucket", "object", nil)

// Destination object
dst, err := minio.NewDestinationInfo("my-bucketname", "my-objectname", nil, nil)
if err != nil {
    fmt.Println(err)
    return
}

// Copy object call
err = minioClient.CopyObject(dst, src)
if err != nil {
    fmt.Println(err)
    return
}
// With decryption parameter.
sseSrc := encrypt.DefaultPBKDF([]byte("password"), []byte("salt"))
src := minio.NewSourceInfo("bucket", "object", sseSrc)

// Destination object
dst, err := minio.NewDestinationInfo("my-bucketname", "my-objectname", nil, nil)
if err != nil {
    fmt.Println(err)
    return
}

// Copy object call
err = minioClient.CopyObject(dst, src)
if err != nil {
    fmt.Println(err)
    return
}

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

Construct a DestinationInfo object that can be used as the destination object for server-side copying operations like CopyObject and ComposeObject.

Parameters

Param Type Description
bucket string Name of the destination bucket
object string Name of the destination object
sse *encrypt.ServerSide Interface provided by encrypt package to specify server-side-encryption. (For more information see https://godoc.org/github.com/minio/minio-go)
userMeta map[string]string User metadata to be set on the destination. If nil, with only one source, user-metadata is copied from source.

Example

// No encryption parameter.
src := minio.NewSourceInfo("bucket", "object", nil)
dst, err := minio.NewDestinationInfo("bucket", "object", nil, nil)
if err != nil {
    fmt.Println(err)
    return
}

// Copy object call
err = minioClient.CopyObject(dst, src)
if err != nil {
    fmt.Println(err)
    return
}
src := minio.NewSourceInfo("bucket", "object", nil)

// With encryption parameter.
sseDst := encrypt.DefaultPBKDF([]byte("password"), []byte("salt"))
dst, err := minio.NewDestinationInfo("bucket", "object", sseDst, nil)
if err != nil {
    fmt.Println(err)
    return
}

// Copy object call
err = minioClient.CopyObject(dst, src)
if err != nil {
    fmt.Println(err)
    return
}

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

Uploads contents from a file to objectName.

FPutObject uploads objects that are less than 64MiB in a single PUT operation. For objects that are greater than the 64MiB in size, FPutObject seamlessly uploads the object in chunks of 64MiB or more depending on the actual file size. The max upload size for an object is 5TB.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object
filePath string Path to file to be uploaded
opts minio.PutObjectOptions Pointer to struct that allows user to set optional custom metadata, content-type, content-encoding, content-disposition, content-language and cache-control headers, pass encryption module for encrypting objects, and optionally configure number of threads for multipart put operation.

Example

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

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

Identical to FPutObject operation, but allows request cancellation.

Parameters

Param Type Description
ctx context.Context Request context
bucketName string Name of the bucket
objectName string Name of the object
filePath string Path to file to be uploaded
opts minio.PutObjectOptions Pointer to struct that allows user to set optional custom metadata, content-type, content-encoding,content-disposition and cache-control headers, pass encryption module for encrypting objects, and optionally configure number of threads for multipart put operation.

Example

ctx, cancel := context.WithTimeout(context.Background(), 100 * time.Second)
defer cancel()

n, err := minioClient.FPutObjectWithContext(ctx, "mybucket", "myobject.csv", "/tmp/otherobject.csv", minio.PutObjectOptions{ContentType:"application/csv"})
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Successfully uploaded bytes: ", n)

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

Fetch metadata of an object.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object
opts minio.StatObjectOptions Options for GET info/stat requests specifying additional options like encryption, If-Match

Return Value

Param Type Description
objInfo minio.ObjectInfo Object stat information

minio.ObjectInfo

Field Type Description
objInfo.LastModified time.Time Time when object was last modified
objInfo.ETag string MD5 checksum of the object
objInfo.ContentType string Content type of the object
objInfo.Size int64 Size of the object

Example

objInfo, err := minioClient.StatObject("mybucket", "myobject", minio.StatObjectOptions{})
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println(objInfo)

RemoveObject(bucketName, objectName string) error

Removes an object.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object
err = minioClient.RemoveObject("mybucket", "myobject")
if err != nil {
    fmt.Println(err)
    return
}

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

Removes a list of objects obtained from an input channel. The call sends a delete request to the server up to 1000 objects at a time. The errors observed are sent over the error channel.

Parameters

Param Type Description
bucketName string Name of the bucket
objectsCh chan string Channel of objects to be removed

Return Values

Param Type Description
errorCh <-chan minio.RemoveObjectError Receive-only channel of errors observed during deletion.
objectsCh := make(chan string)

// Send object names that are needed to be removed to objectsCh
go func() {
    defer close(objectsCh)
    // List all objects from a bucket-name with a matching prefix.
    for object := range minioClient.ListObjects("my-bucketname", "my-prefixname", true, nil) {
        if object.Err != nil {
            log.Fatalln(object.Err)
        }
        objectsCh <- object.Key
    }
}()

for rErr := range minioClient.RemoveObjects("mybucket", objectsCh) {
    fmt.Println("Error detected during deletion: ", rErr)
}

RemoveObjectsWithContext(ctx context.Context, bucketName string, objectsCh chan string) (errorCh <-chan RemoveObjectError)

Identical to RemoveObjects operation, but accepts a context for request cancellation.

Parameters

Param Type Description
ctx context.Context Request context
bucketName string Name of the bucket
objectsCh chan string Channel of objects to be removed

Return Values

Param Type Description
errorCh <-chan minio.RemoveObjectError Receive-only channel of errors observed during deletion.
objectsCh := make(chan string)
ctx, cancel := context.WithTimeout(context.Background(), 100 * time.Second)
defer cancel()

// Send object names that are needed to be removed to objectsCh
go func() {
    defer close(objectsCh)
    // List all objects from a bucket-name with a matching prefix.
    for object := range minioClient.ListObjects("my-bucketname", "my-prefixname", true, nil) {
        if object.Err != nil {
            log.Fatalln(object.Err)
        }
        objectsCh <- object.Key
    }
}()

for rErr := range minioClient.RemoveObjects(ctx, "my-bucketname", objectsCh) {
    fmt.Println("Error detected during deletion: ", rErr)
}

SelectObjectContent(ctx context.Context, bucketName string, objectsName string, expression string, options SelectObjectOptions) *SelectResults

Parameters

Param Type Description
ctx context.Context Request context
bucketName string Name of the bucket
objectName string Name of the object
options SelectObjectOptions Query Options

Return Values

Param Type Description
SelectResults SelectResults Is an io.ReadCloser object which can be directly passed to csv.NewReader for processing output.
    // Initialize minio client object.
    minioClient, err := minio.New(endpoint, accessKeyID, secretAccessKey, useSSL)
    if err != nil {
        log.Fatalln(err)
    }

    opts := minio.SelectObjectOptions{
        Expression:     "select count(*) from s3object",
        ExpressionType: minio.QueryExpressionTypeSQL,
        InputSerialization: minio.SelectObjectInputSerialization{
            CompressionType: minio.SelectCompressionNONE,
            CSV: &minio.CSVInputOptions{
                FileHeaderInfo:  minio.CSVFileHeaderInfoNone,
                RecordDelimiter: "\n",
                FieldDelimiter:  ",",
            },
        },
        OutputSerialization: minio.SelectObjectOutputSerialization{
            CSV: &minio.CSVOutputOptions{
                RecordDelimiter: "\n",
                FieldDelimiter:  ",",
            },
        },
    }

    reader, err := s3Client.SelectObjectContent(context.Background(), "mycsvbucket", "mycsv.csv", opts)
    if err != nil {
        log.Fatalln(err)
    }
    defer reader.Close()

    if _, err := io.Copy(os.Stdout, reader); err != nil {
        log.Fatalln(err)
    }

RemoveIncompleteUpload(bucketName, objectName string) error

Removes a partially uploaded object.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object

Example

err = minioClient.RemoveIncompleteUpload("mybucket", "myobject")
if err != nil {
    fmt.Println(err)
    return
}

5. Presigned operations

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

Generates a presigned URL for HTTP GET operations. Browsers/Mobile clients may point to this URL to directly download objects even if the bucket is private. This presigned URL can have an associated expiration time in seconds after which it is no longer operational. The default expiry is set to 7 days.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object
expiry time.Duration Expiry of presigned URL in seconds
reqParams url.Values Additional response header overrides supports response-expires, response-content-type, response-cache-control, response-content-disposition.

Example

// Set request parameters for content-disposition.
reqParams := make(url.Values)
reqParams.Set("response-content-disposition", "attachment; filename=\"your-filename.txt\"")

// Generates a presigned url which expires in a day.
presignedURL, err := minioClient.PresignedGetObject("mybucket", "myobject", time.Second * 24 * 60 * 60, reqParams)
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Successfully generated presigned URL", presignedURL)

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

Generates a presigned URL for HTTP PUT operations. Browsers/Mobile clients may point to this URL to upload objects directly to a bucket even if it is private. This presigned URL can have an associated expiration time in seconds after which it is no longer operational. The default expiry is set to 7 days.

NOTE: you can upload to S3 only with specified object name.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object
expiry time.Duration Expiry of presigned URL in seconds

Example

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

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

Generates a presigned URL for HTTP HEAD operations. Browsers/Mobile clients may point to this URL to directly get metadata from objects even if the bucket is private. This presigned URL can have an associated expiration time in seconds after which it is no longer operational. The default expiry is set to 7 days.

Parameters

Param Type Description
bucketName string Name of the bucket
objectName string Name of the object
expiry time.Duration Expiry of presigned URL in seconds
reqParams url.Values Additional response header overrides supports response-expires, response-content-type, response-cache-control, response-content-disposition.

Example

// Set request parameters for content-disposition.
reqParams := make(url.Values)
reqParams.Set("response-content-disposition", "attachment; filename=\"your-filename.txt\"")

// Generates a presigned url which expires in a day.
presignedURL, err := minioClient.PresignedHeadObject("mybucket", "myobject", time.Second * 24 * 60 * 60, reqParams)
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println("Successfully generated presigned URL", presignedURL)

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

Allows setting policy conditions to a presigned URL for POST operations. Policies such as bucket name to receive object uploads, key name prefixes, expiry policy may be set.

// Initialize policy condition config.
policy := minio.NewPostPolicy()

// Apply upload policy restrictions:
policy.SetBucket("mybucket")
policy.SetKey("myobject")
policy.SetExpires(time.Now().UTC().AddDate(0, 0, 10)) // expires in 10 days

// Only allow 'png' images.
policy.SetContentType("image/png")

// Only allow content size in range 1KB to 1MB.
policy.SetContentLengthRange(1024, 1024*1024)

// Add a user metadata using the key "custom" and value "user"
policy.SetUserMetadata("custom", "user")

// Get the POST form key/value object:
url, formData, err := minioClient.PresignedPostPolicy(policy)
if err != nil {
    fmt.Println(err)
    return
}

// POST your content from the command line using `curl`
fmt.Printf("curl ")
for k, v := range formData {
    fmt.Printf("-F %s=%s ", k, v)
}
fmt.Printf("-F file=@/etc/bash.bashrc ")
fmt.Printf("%s\n", url)

6. Bucket policy/notification operations

SetBucketPolicy(bucketname, policy string) error

Set access permissions on bucket or an object prefix.

Parameters

Param Type Description
bucketName string Name of the bucket
policy string Policy to be set

Return Values

Param Type Description
err error Standard Error

Example

policy := `{"Version": "2012-10-17","Statement": [{"Action": ["s3:GetObject"],"Effect": "Allow","Principal": {"AWS": ["*"]},"Resource": ["arn:aws:s3:::my-bucketname/*"],"Sid": ""}]}`

err = minioClient.SetBucketPolicy("my-bucketname", policy)
if err != nil {
    fmt.Println(err)
    return
}

GetBucketPolicy(bucketName) (policy string, error)

Get access permissions on a bucket or a prefix.

Parameters

Param Type Description
bucketName string Name of the bucket

Return Values

Param Type Description
policy string Policy returned from the server
err error Standard Error

Example

policy, err := minioClient.GetBucketPolicy("my-bucketname")
if err != nil {
    log.Fatalln(err)
}

GetBucketNotification(bucketName string) (BucketNotification, error)

Get notification configuration on a bucket.

Parameters

Param Type Description
bucketName string Name of the bucket

Return Values

Param Type Description
bucketNotification minio.BucketNotification structure which holds all notification configurations
err error Standard Error

Example

bucketNotification, err := minioClient.GetBucketNotification("mybucket")
if err != nil {
    fmt.Println("Failed to get bucket notification configurations for mybucket", err)
    return
}

for _, queueConfig := range bucketNotification.QueueConfigs {
    for _, e := range queueConfig.Events {
        fmt.Println(e + " event is enabled")
    }
}

SetBucketNotification(bucketName string, bucketNotification BucketNotification) error

Set a new bucket notification on a bucket.

Parameters

Param Type Description
bucketName string Name of the bucket
bucketNotification minio.BucketNotification Represents the XML to be sent to the configured web service

Return Values

Param Type Description
err error Standard Error

Example

queueArn := minio.NewArn("aws", "sqs", "us-east-1", "804605494417", "PhotoUpdate")

queueConfig := minio.NewNotificationConfig(queueArn)
queueConfig.AddEvents(minio.ObjectCreatedAll, minio.ObjectRemovedAll)
queueConfig.AddFilterPrefix("photos/")
queueConfig.AddFilterSuffix(".jpg")

bucketNotification := minio.BucketNotification{}
bucketNotification.AddQueue(queueConfig)

err = minioClient.SetBucketNotification("mybucket", bucketNotification)
if err != nil {
    fmt.Println("Unable to set the bucket notification: ", err)
    return
}

RemoveAllBucketNotification(bucketName string) error

Remove all configured bucket notifications on a bucket.

Parameters

Param Type Description
bucketName string Name of the bucket

Return Values

Param Type Description
err error Standard Error

Example

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

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

ListenBucketNotification API receives bucket notification events through the notification channel. The returned notification channel has two fields 'Records' and 'Err'.

NOTE: Notification channel is closed at the first occurrence of an error.

Parameters

Param Type Description
bucketName string Bucket to listen notifications on
prefix string Object key prefix to filter notifications for
suffix string Object key suffix to filter notifications for
events []string Enables notifications for specific event types
doneCh chan struct{} A message on this channel ends the ListenBucketNotification iterator

Return Values

Param Type Description
notificationInfo chan minio.NotificationInfo Channel of bucket notifications

minio.NotificationInfo

|Field |Type |Description |
|notificationInfo.Records | []minio.NotificationEvent | Collection of notification events |
|notificationInfo.Err | error | Carries any error occurred during the operation (Standard Error) |

Example

// Create a done channel to control 'ListenBucketNotification' go routine.
doneCh := make(chan struct{})

// Indicate a background go-routine to exit cleanly upon return.
defer close(doneCh)

// Listen for bucket notifications on "mybucket" filtered by prefix, suffix and events.
for notificationInfo := range minioClient.ListenBucketNotification("mybucket", "myprefix/", ".mysuffix", []string{
    "s3:ObjectCreated:*",
    "s3:ObjectAccessed:*",
    "s3:ObjectRemoved:*",
    }, doneCh) {
    if notificationInfo.Err != nil {
        fmt.Println(notificationInfo.Err)
    }
    fmt.Println(notificationInfo)
}

SetBucketLifecycle(bucketname, lifecycle string) error

Set lifecycle on bucket or an object prefix.

Parameters

Param Type Description
bucketName string Name of the bucket
lifecycle string Lifecycle to be set

Return Values

Param Type Description
err error Standard Error

Example

lifecycle := `<LifecycleConfiguration>
 <Rule>
   <ID>expire-bucket</ID>
   <Prefix></Prefix>
   <Status>Enabled</Status>
   <Expiration>
     <Days>365</Days>
   </Expiration>
 </Rule>
</LifecycleConfiguration>`

err = minioClient.SetBucketLifecycle("my-bucketname", lifecycle)
if err != nil {
    fmt.Println(err)
    return
}

GetBucketLifecycle(bucketName) (lifecycle string, error)

Get lifecycle on a bucket or a prefix.

Parameters

Param Type Description
bucketName string Name of the bucket

Return Values

Param Type Description
lifecycle string Lifecycle returned from the server
err error Standard Error

Example

lifecycle, err := minioClient.GetBucketLifecycle("my-bucketname")
if err != nil {
    log.Fatalln(err)
}

7. Client custom settings

SetAppInfo(appName, appVersion string)

Add custom application details to User-Agent.

Parameters

Param Type Description
appName string Name of the application performing the API requests.
appVersion string Version of the application performing the API requests.

Example

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

SetCustomTransport(customHTTPTransport http.RoundTripper)

Overrides default HTTP transport. This is usually needed for debugging or for adding custom TLS certificates.

Parameters

Param Type Description
customHTTPTransport http.RoundTripper Custom transport e.g, to trace API requests and responses for debugging purposes.

TraceOn(outputStream io.Writer)

Enables HTTP tracing. The trace is written to the io.Writer provided. If outputStream is nil, trace is written to os.Stdout.

Parameters

Param Type Description
outputStream io.Writer HTTP trace is written into outputStream.

TraceOff()

Disables HTTP tracing.

SetS3TransferAccelerate(acceleratedEndpoint string)

Set AWS S3 transfer acceleration endpoint for all API requests hereafter.
NOTE: This API applies only to AWS S3 and is a no operation for S3 compatible object storage services.

Parameters

Param Type Description
acceleratedEndpoint string Set to new S3 transfer acceleration endpoint.

8. Explore Further