Minio go
MinIO Go client SDK for S3 compatible object storage
MinIO Go Client SDK for Amazon S3 Compatible Cloud Storage ================================================================================================================================================================================================================================================================================================================================================================================================================== The project is written primarily in Go, distributed under the Apache License 2.0 license, first published in 2015. It has gained significant community traction with 2,959 stars and 741 forks on GitHub. Key topics include: aws-signature, client-sdk, cloud, fileuploader, go.
MinIO Go Client SDK for Amazon S3 Compatible Cloud Storage

The MinIO Go Client SDK provides straightforward APIs to access any Amazon S3 compatible object storage.
This Quickstart Guide covers how to install the MinIO client SDK, connect to MinIO, and create a sample file uploader. For a complete list of APIs and examples, see the godoc documentation or Go Client API Reference.
These examples presume a working Go development environment and the MinIO mc command line tool.
Download from Github
From your project directory:
shgo get github.com/minio/minio-go/v7
Initialize a MinIO Client Object
The MinIO client requires the following parameters to connect to an Amazon S3 compatible object storage:
| Parameter | Description |
|---|---|
endpoint | URL to object storage service. |
_minio.Options_ | All the options such as credentials, custom transport etc. |
gopackage main import ( "log" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) func main() { endpoint := "play.min.io" accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true // Initialize minio client object. minioClient, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: useSSL, }) if err != nil { log.Fatalln(err) } log.Printf("%#v\n", minioClient) // minioClient is now set up }
Example - File Uploader
This sample code connects to an object storage server, creates a bucket, and uploads a file to the bucket. It uses the MinIO play server, a public MinIO cluster located at https://play.min.io.
The play server runs the latest stable version of MinIO and may be used for testing and development. The access credentials shown in this example are open to the public and all data uploaded to play should be considered public and non-protected.
FileUploader.go
This example does the following:
-
Connects to the MinIO
playserver using the provided credentials. -
Creates a bucket named
testbucket. -
Uploads a file named
testdatafrom/tmp. -
Verifies the file was created using
mc ls.go// FileUploader.go MinIO example package main import ( "context" "log" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) func main() { ctx := context.Background() endpoint := "play.min.io" accessKeyID := "Q3AM3UQ867SPQQA43P2F" secretAccessKey := "zuf+tfteSlswRu7BJ86wekitnifILbZam1KYY3TG" useSSL := true // Initialize minio client object. minioClient, err := minio.New(endpoint, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: useSSL, }) if err != nil { log.Fatalln(err) } // Make a new bucket called testbucket. bucketName := "testbucket" location := "us-east-1" err = minioClient.MakeBucket(ctx, bucketName, minio.MakeBucketOptions{Region: location}) if err != nil { // Check to see if we already own this bucket (which happens if you run this twice) exists, errBucketExists := minioClient.BucketExists(ctx, bucketName) if errBucketExists == nil && exists { log.Printf("We already own %s\n", bucketName) } else { log.Fatalln(err) } } else { log.Printf("Successfully created %s\n", bucketName) } // Upload the test file // Change the value of filePath if the file is in another location objectName := "testdata" filePath := "/tmp/testdata" contentType := "application/octet-stream" // Upload the test file with FPutObject info, err := minioClient.FPutObject(ctx, bucketName, objectName, filePath, minio.PutObjectOptions{ContentType: contentType}) if err != nil { log.Fatalln(err) } log.Printf("Successfully uploaded %s of size %d\n", objectName, info.Size) }
1. Create a test file containing data:
You can do this with dd on Linux or macOS systems:
shdd if=/dev/urandom of=/tmp/testdata bs=2048 count=10
or fsutil on Windows:
shfsutil file createnew "C:\Users\<username>\Desktop\sample.txt" 20480
2. Run FileUploader with the following commands:
shgo mod init example/FileUploader go get github.com/minio/minio-go/v7 go get github.com/minio/minio-go/v7/pkg/credentials go run FileUploader.go
The output resembles the following:
sh2023/11/01 14:27:55 Successfully created testbucket 2023/11/01 14:27:55 Successfully uploaded testdata of size 20480
3. Verify the Uploaded File With mc ls:
shmc ls play/testbucket [2023-11-01 14:27:55 UTC] 20KiB STANDARD TestDataFile
API Reference
The full API Reference is available here.
API Reference : Bucket Operations
API Reference : Bucket policy Operations
API Reference : Bucket notification Operations
SetBucketNotificationGetBucketNotificationRemoveAllBucketNotificationListenBucketNotification(MinIO Extension)ListenNotification(MinIO Extension)
API Reference : File Object Operations
API Reference : Object Operations
GetObjectPutObjectPutObjectStreamingStatObjectCopyObjectRemoveObjectRemoveObjectsRemoveIncompleteUploadSelectObjectContent
API Reference : Presigned Operations
API Reference : Client custom settings
Full Examples
Full Examples : Bucket Operations
- makebucket.go
- listbuckets.go
- bucketexists.go
- removebucket.go
- listobjects.go
- listobjectsV2.go
- listincompleteuploads.go
Full Examples : Bucket policy Operations
Full Examples : Bucket lifecycle Operations
Full Examples : Bucket encryption Operations
Full Examples : Bucket replication Operations
Full Examples : Bucket notification Operations
- setbucketnotification.go
- getbucketnotification.go
- removeallbucketnotification.go
- listenbucketnotification.go (MinIO Extension)
- listennotification.go (MinIO Extension)
Full Examples : File Object Operations
Full Examples : Object Operations
- putobject.go
- getobject.go
- statobject.go
- copyobject.go
- removeobject.go
- removeincompleteupload.go
- removeobjects.go
Full Examples : Encrypted Object Operations
Full Examples : Presigned Operations
Explore Further
Contribute
License
This SDK is distributed under the Apache License, Version 2.0, see LICENSE and NOTICE for more information.
Contributors
Showing top 12 contributors by commit count.
