The Hanzo S3 Go SDK provides straightforward APIs to access any Amazon S3 compatible object storage.
This Quickstart Guide covers how to install the SDK, connect to Hanzo S3, 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.
From your project directory:
go get github.com/minio/minio-go/v7The 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. |
package main
import (
"log"
"github.com/minio/minio-go/v7"
"github.com/minio/minio-go/v7/pkg/credentials"
)
func main() {
endpoint := "s3.hanzo.ai"
accessKeyID := "YOUR-ACCESSKEYID"
secretAccessKey := "YOUR-SECRETACCESSKEY"
useSSL := true
// Initialize Hanzo S3 client object.
s3Client, err := minio.New(endpoint, &minio.Options{
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
Secure: useSSL,
})
if err != nil {
log.Fatalln(err)
}
log.Printf("%#v\n", s3Client) // s3Client is now set up
}This sample code connects to an object storage server, creates a bucket, and uploads a file to the bucket. It uses the Hanzo S3 server at https://s3.hanzo.ai.
This example does the following:
-
Connects to the Hanzo S3 server using the provided credentials.
-
Creates a bucket named
testbucket. -
Uploads a file named
testdatafrom/tmp.// FileUploader.go Hanzo S3 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 := "s3.hanzo.ai" accessKeyID := "YOUR-ACCESSKEYID" secretAccessKey := "YOUR-SECRETACCESSKEY" useSSL := true // Initialize Hanzo S3 client object. s3Client, 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 = s3Client.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 := s3Client.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 := s3Client.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:
dd if=/dev/urandom of=/tmp/testdata bs=2048 count=10or fsutil on Windows:
fsutil file createnew "C:\Users\<username>\Desktop\sample.txt" 204802. Run FileUploader with the following commands:
go 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.goThe output resembles the following:
2024/01/01 14:27:55 Successfully created testbucket
2024/01/01 14:27:55 Successfully uploaded testdata of size 20480The full API Reference is available here.
SetBucketNotificationGetBucketNotificationRemoveAllBucketNotificationListenBucketNotification(Hanzo S3 Extension)ListenNotification(Hanzo S3 Extension)
GetObjectPutObjectPutObjectStreamingStatObjectCopyObjectRemoveObjectRemoveObjectsRemoveIncompleteUploadSelectObjectContent
- makebucket.go
- listbuckets.go
- bucketexists.go
- removebucket.go
- listobjects.go
- listobjectsV2.go
- listincompleteuploads.go
- setbucketnotification.go
- getbucketnotification.go
- removeallbucketnotification.go
- listenbucketnotification.go (Hanzo S3 Extension)
- listennotification.go (Hanzo S3 Extension)
- putobject.go
- getobject.go
- statobject.go
- copyobject.go
- removeobject.go
- removeincompleteupload.go
- removeobjects.go
This SDK is distributed under the Apache License, Version 2.0, see LICENSE and NOTICE for more information.