mirror of
https://github.com/restic/restic.git
synced 2025-12-26 09:39:45 -05:00
15 KiB
15 KiB
API Documentation
Minio client object creation
Minio client object is created using minio-go:
package main
import (
"fmt"
"github.com/minio/minio-go"
)
func main() {
s3Client, err := minio.New("s3.amazonaws.com", "YOUR-ACCESSKEYID", "YOUR-SECRETACCESSKEY", false)
if err !!= nil {
fmt.Println(err)
return
}
}
s3Client can be used to perform operations on S3 storage. APIs are described below.
Bucket operations
Object operations
File operations.
Bucket policy operations.
Presigned operations
Bucket operations
#### MakeBucket(bucketName string, location string) error Create a new bucket.
Parameters
bucketNamestring - Name of the bucket.locationstring - region valid values are 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 := s3Client.MakeBucket("mybucket", "us-west-1")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Successfully created mybucket.")
#### ListBuckets() ([]BucketInfo, error) Lists all buckets.
bucketList lists bucket in the format:
bucket.Namestring: bucket namebucket.CreationDatetime.Time : date when bucket was created
Example
buckets, err := s3Client.ListBuckets()
if err != nil {
fmt.Println(err)
return
}
for _, bucket := range buckets {
fmt.Println(bucket)
}
#### BucketExists(bucketName string) error Check if bucket exists.
Parameters
bucketNamestring : name of the bucket
Example
err := s3Client.BucketExists("mybucket")
if err != nil {
fmt.Println(err)
return
}
#### RemoveBucket(bucketName string) error Remove a bucket.
Parameters
bucketNamestring : name of the bucket
Example
err := s3Client.RemoveBucket("mybucket")
if err != nil {
fmt.Println(err)
return
}
#### GetBucketPolicy(bucketName string, objectPrefix string) error Get access permissions on a bucket or a prefix.
Parameters
bucketNamestring : name of the bucketobjectPrefixstring : name of the object prefix
Example
bucketPolicy, err := s3Client.GetBucketPolicy("mybucket", "")
if err != nil {
fmt.Println(err)
return
}
fmt.Println("Access permissions for mybucket is", bucketPolicy)
#### SetBucketPolicy(bucketname string, objectPrefix string, policy BucketPolicy) error Set access permissions on bucket or an object prefix.
Parameters
bucketNamestring: name of the bucketobjectPrefixstring : name of the object prefixpolicyBucketPolicy: policy can be BucketPolicyNone, BucketPolicyReadOnly, BucketPolicyReadWrite, BucketPolicyWriteOnly
Example
err := s3Client.SetBucketPolicy("mybucket", "myprefix", BucketPolicyReadWrite)
if err != nil {
fmt.Println(err)
return
}
#### RemoveBucketPolicy(bucketname string, objectPrefix string) error Remove existing permissions on bucket or an object prefix.
Parameters
bucketNamestring: name of the bucketobjectPrefixstring : name of the object prefix
Example
err := s3Client.RemoveBucketPolicy("mybucket", "myprefix")
if err != nil {
fmt.Println(err)
return
}
#### ListObjects(bucketName string, prefix string, recursive bool, doneCh chan struct{}) <-chan ObjectInfo List objects in a bucket.
Parameters
bucketNamestring: name of the bucketobjectPrefixstring: the prefix of the objects that should be listedrecursivebool:trueindicates recursive style listing andfalseindicates directory style listing delimited by '/'doneChchan struct{} : channel for pro-actively closing the internal go routine
Return Value
<-chan ObjectInfochan ObjectInfo: Read channel for all the objects in the bucket, the object is of the format:objectInfo.Keystring: name of the objectobjectInfo.Sizeint64: size of the objectobjectInfo.ETagstring: etag of the objectobjectInfo.LastModifiedtime.Time: modified time stamp
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
objectCh := s3Client.ListObjects("mybucket", "myprefix", isRecursive, doneCh)
for object := range objectCh {
if object.Err != nil {
fmt.Println(object.Err)
return
}
fmt.Println(object)
}
#### ListIncompleteUploads(bucketName string, prefix string, recursive bool, doneCh chan struct{}) <-chan ObjectMultipartInfo List partially uploaded objects in a bucket.
Parameters
bucketnamestring: name of the bucketprefixstring: prefix of the object names that are partially uploadedrecursivebool: directory style listing when false, recursive listing when truedoneChchan struct{} : channel for pro-actively closing the internal go routine
Return Value
<-chan ObjectMultipartInfochan ObjectMultipartInfo : emits multipart objects of the format:multiPartObjInfo.Keystring: name of the incomplete objectmultiPartObjInfo.UploadIDstring: upload ID of the incomplete objectmultiPartObjInfo.Sizeint64: size of the 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
multiPartObjectCh := s3Client.ListIncompleteUploads("mybucket", "myprefix", isRecursive, doneCh)
for multiPartObject := range multiPartObjectCh {
if multiPartObject.Err != nil {
fmt.Println(multiPartObject.Err)
return
}
fmt.Println(multiPartObject)
}
Object operations
#### GetObject(bucketName string, objectName string) *Object Download an object.Parameters
bucketNamestring: name of the bucketobjectNamestring: name of the object
Return Value
object*Object : Object represents object reader.
Example
object, err := s3Client.GetObject("mybucket", "photo.jpg")
if err != nil {
fmt.Println(err)
return
}
localFile _ := os.Open("/tmp/local-file")
if _, err := io.Copy(localFile, object); err != nil {
fmt.Println(err)
return
}
#### FGetObject(bucketName string, objectName string, filePath string) error Callback is called with `error` in case of error or `null` in case of success
Parameters
bucketNamestring: name of the bucketobjectNamestring: name of the objectfilePathstring: path to which the object data will be written to
Example
err := s3Client.FGetObject("mybucket", "photo.jpg", "/tmp/photo.jpg")
if err != nil {
fmt.Println(err)
return
}
#### PutObject(bucketName string, objectName string, reader io.Reader, contentType string) (n int, err error) Upload contents from `io.Reader` to objectName.
Parameters
bucketNamestring: name of the bucketobjectNamestring: name of the objectreaderio.Reader: Any golang object implementing io.ReadercontentTypestring: content type of the object.
Example
file, err := os.Open("my-testfile")
if err != nil {
fmt.Println(err)
return
}
defer file.Close()
n, err := s3Client.PutObject("my-bucketname", "my-objectname", object, "application/octet-stream")
if err != nil {
fmt.Println(err)
return
}
#### CopyObject(bucketName string, objectName string, objectSource string, conditions CopyConditions) error Copy a source object into a new object with the provided name in the provided bucket.
Parameters
bucketNamestring: name of the bucketobjectNamestring: name of the objectobjectSourcestring: name of the object source.conditionsCopyConditions: Collection of supported CopyObject conditions. ['x-amz-copy-source', 'x-amz-copy-source-if-match', 'x-amz-copy-source-if-none-match', 'x-amz-copy-source-if-unmodified-since', 'x-amz-copy-source-if-modified-since']
Example
// All following conditions are allowed and can be combined together.
// Set copy conditions.
var copyConds = minio.NewCopyConditions()
// Set modified condition, copy object modified since 2014 April.
copyConds.SetModified(time.Date(2014, time.April, 0, 0, 0, 0, 0, time.UTC))
// Set unmodified condition, copy object unmodified since 2014 April.
// copyConds.SetUnmodified(time.Date(2014, time.April, 0, 0, 0, 0, 0, time.UTC))
// Set matching ETag condition, copy object which matches the following ETag.
// copyConds.SetMatchETag("31624deb84149d2f8ef9c385918b653a")
// Set matching ETag except condition, copy object which does not match the following ETag.
// copyConds.SetMatchETagExcept("31624deb84149d2f8ef9c385918b653a")
err := s3Client.CopyObject("my-bucketname", "my-objectname", "/my-sourcebucketname/my-sourceobjectname", copyConds)
if err != nil {
fmt.Println(err)
return
}
#### FPutObject(bucketName string, objectName string, filePath string, contentType string) error Uploads the object using contents from a file
Parameters
bucketNamestring: name of the bucketobjectNamestring: name of the objectfilePathstring: file path of the file to be uploadedcontentTypestring: content type of the object
Example
n, err := s3Client.FPutObject("my-bucketname", "my-objectname", "/tmp/my-filename.csv", "application/csv")
if err != nil {
fmt.Println(err)
return
}
#### StatObject(bucketName string, objectName string) (ObjectInfo, error) Get metadata of an object.
Parameters
bucketNamestring: name of the bucketobjectNamestring: name of the object
Return Value
objInfo ObjectInfo : object stat info for following format:
objInfo.Sizeint64: size of the objectobjInfo.ETagstring: etag of the objectobjInfo.ContentTypestring: Content-Type of the objectobjInfo.LastModifiedstring: modified time stamp
Example
objInfo, err := s3Client.StatObject("mybucket", "photo.jpg")
if err != nil {
fmt.Println(err)
return
}
fmt.Println(objInfo)
#### RemoveObject(bucketName string, objectName string) error Remove an object.
Parameters
bucketNamestring: name of the bucketobjectNamestring: name of the object
Example
err := s3Client.RemoveObject("mybucket", "photo.jpg")
if err != nil {
fmt.Println(err)
return
}
#### RemoveIncompleteUpload(bucketName string, objectName string) error Remove an partially uploaded object.
Parameters
bucketNamestring: name of the bucketobjectNamestring: name of the object
Example
err := s3Client.RemoveIncompleteUpload("mybucket", "photo.jpg")
if err != nil {
fmt.Println(err)
return
}
Presigned operations
#### PresignedGetObject(bucketName, objectName string, expiry time.Duration, reqParams url.Values) error Generate a presigned URL for GET.
Parameters
bucketNamestring: name of the bucket.objectNamestring: name of the object.expirytime.Duration: expiry in seconds.reqParamsurl.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 := s3Client.PresignedGetObject("mybucket", "photo.jpg", time.Second * 24 * 60 * 60, reqParams)
if err != nil {
fmt.Println(err)
return
}
#### PresignedPutObject(bucketName string, objectName string, expiry time.Duration) (string, error) Generate a presigned URL for PUT.
NOTE: you can upload to S3 only with specified object name.
Parameters
bucketNamestring: name of the bucketobjectNamestring: name of the objectexpirytime.Duration: expiry in seconds
Example
// Generates a url which expires in a day.
presignedURL, err := s3Client.PresignedPutObject("mybucket", "photo.jpg", time.Second * 24 * 60 * 60)
if err != nil {
fmt.Println(err)
return
}
#### PresignedPostPolicy(policy PostPolicy) (map[string]string, error) PresignedPostPolicy we can provide policies specifying conditions restricting what you want to allow in a POST request, such as bucket name where objects can be uploaded, key name prefixes that you want to allow for the object being created and more.
We need to create our policy first:
policy := minio.NewPostPolicy()
Apply upload policy restrictions:
policy.SetBucket("my-bucketname")
policy.SetKey("my-objectname")
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)
Get the POST form key/value object:
formData, err := s3Client.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 m {
fmt.Printf("-F %s=%s ", k, v)
}
fmt.Printf("-F file=@/etc/bash.bashrc ")
fmt.Printf("https://my-bucketname.s3.amazonaws.com\n")