Golang call aws-sdk object store operation S3

Golang call aws-sdk object store operation S3

Foreword

Because business problems, write an S3 object storage management code, as has been written Go, so this use of Go, Go Well, fast, multi-threaded comes, it goes without saying that the benefits of it.

Basic functions

  1. View S3 contained in the bucket
  2. bucket of files / folders
  3. bucket deleted
  4. Create bucket
  5. bucket file upload
  6. bucket file download
  7. bucket file deletion

    aws-sdk-go installation

    Play Golang you can not get at? Right, that what? The plane! That airport, the placement of ~

go get github.com/aws/aws-sdk-go

aws-sdk-go basis using

Construction of basic S3 is connected

When access S3, and we need access_key, secret_key, object storage access IP these three parameters, we first need to create config a aws, and it plainly, we need to define aws configuration, so it knows how to visit, where to visit And other issues.
Construction of a connection code S3 follows

package main
import (
    "fmt"
    "os"
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/credentials"
    _ "github.com/aws/aws-sdk-go/service/s3/s3manager"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/service/s3"
)
func main() {

    access_key := "xxxxxxxxxxxxx"
    secret_key := "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
    end_point := "http://xx.xx.xx.xx:7480" //endpoint设置,不要动
    
    sess, err := session.NewSession(&aws.Config{
        Credentials:      credentials.NewStaticCredentials(access_key, secret_key, ""),
        Endpoint:         aws.String(end_point),
        Region:           aws.String("us-east-1"),
        DisableSSL:       aws.Bool(true),
        S3ForcePathStyle: aws.Bool(false), //virtual-host style方式,不要修改
    })
}

This time you need to define what access_key, secret_key, end_point these three parameters
followed by all of the code are connected to the template, core, back I used above in place of the configuration, please note!
All code is passed on GIT, that time will give the address, do not know how to copy and come on down!

View S3 contained in the bucket

See all bucket

package main
import (
    导入包同上
)

func exitErrorf(msg string, args ...interface{}) {
    fmt.Fprintf(os.Stderr, msg+"\n", args...)
    os.Exit(1)
}

func main() {

    配置同上

    svc := s3.New(sess)
    result, err := svc.ListBuckets(nil)
    if err != nil {
        exitErrorf("Unable to list buckets, %v", err)
    }
    
    fmt.Println("Buckets:")
    
    for _, b := range result.Buckets {
        fmt.Printf("* %s created on %s\n",
            aws.StringValue(b.Name), aws.TimeValue(b.CreationDate))
    }

    for _, b := range result.Buckets {
        fmt.Printf("%s\n", aws.StringValue(b.Name))
    }
    
}

Bucket list of files / folders

View a bucket contained in the file / folder

package main
import (
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/service/s3"
    "fmt"
    "os"
)

func exitErrorf(msg string, args ...interface{}) {
    fmt.Fprintf(os.Stderr, msg+"\n", args...)
    os.Exit(1)
}

func main() {

    配置同上

    // bucket后跟,go run ....go bucketname
    bucket := os.Args[1]
    fmt.Printf(bucket)
    fmt.Printf("\n")

    svc := s3.New(sess)

    params := &s3.ListObjectsInput{
        Bucket:             aws.String(bucket), 
    }
    resp, err := svc.ListObjects(params)

    if err != nil {
        exitErrorf("Unable to list items in bucket %q, %v", bucket, err)
    }
    
    for _, item := range resp.Contents {
        fmt.Println("Name:         ", *item.Key)
        fmt.Println("Last modified:", *item.LastModified)
        fmt.Println("Size:         ", *item.Size)
        fmt.Println("Storage class:", *item.StorageClass)
        fmt.Println("")
    }
    
}

Create bucket

Create a bucket

package main

import (
    导包同上
)


func exitErrorf(msg string, args ...interface{}) {
    fmt.Fprintf(os.Stderr, msg+"\n", args...)
    os.Exit(1)
}

func main() {

    配置同上

    bucket := os.Args[1]

    if len(os.Args) != 2 {
        exitErrorf("Bucket name required\nUsage: %s bucket_name",
            os.Args[0])
    }
    

    // Create S3 service client
    svc := s3.New(sess)

    params := &s3.CreateBucketInput{
        Bucket: aws.String(bucket),
 }

    _, err = svc.CreateBucket(params)

    if err != nil {
        exitErrorf("Unable to create bucket %q, %v", bucket, err)
    }
    
    // Wait until bucket is created before finishing
    fmt.Printf("Waiting for bucket %q to be created...\n", bucket)
    
    err = svc.WaitUntilBucketExists(&s3.HeadBucketInput{
        Bucket: aws.String(bucket),
    })

    if err != nil {
        exitErrorf("Error occurred while waiting for bucket to be created, %v", bucket)
    }
    
    fmt.Printf("Bucket %q successfully created\n", bucket)
}

bucket file upload

To a fixed bucket in file transfer

package main

import (
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"
    "fmt"
    "os"
)


func exitErrorf(msg string, args ...interface{}) {
    fmt.Fprintf(os.Stderr, msg+"\n", args...)
    os.Exit(1)
}

func main() {

    配置同上

    if len(os.Args) != 3 {
        exitErrorf("bucket and file name required\nUsage: %s bucket_name filename",
            os.Args[0])
    }
    
    bucket := os.Args[1]
    filename := os.Args[2]
    
    file, err := os.Open(filename)
    if err != nil {
        exitErrorf("Unable to open file %q, %v", err)
    }
    
    defer file.Close()

    uploader := s3manager.NewUploader(sess)

    _, err = uploader.Upload(&s3manager.UploadInput{
        Bucket: aws.String(bucket),
        Key: aws.String(filename),
        Body: file,
    })
    if err != nil {
        // Print the error and exit.
        exitErrorf("Unable to upload %q to %q, %v", filename, bucket, err)
    }
    
    fmt.Printf("Successfully uploaded %q to %q\n", filename, bucket)
}

bucket file download

Download a file in a bucket

package main

import (
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/service/s3"
    "github.com/aws/aws-sdk-go/service/s3/s3manager"

    "fmt"
    "os"
)


func exitErrorf(msg string, args ...interface{}) {
    fmt.Fprintf(os.Stderr, msg+"\n", args...)
    os.Exit(1)
}

func main() {

    配置同上

    if len(os.Args) != 3 {
        exitErrorf("Bucket and item names required\nUsage: %s bucket_name item_name",
            os.Args[0])
    }
    
    bucket := os.Args[1]
    item := os.Args[2]

    file, err := os.Create(item)
    if err != nil {
        exitErrorf("Unable to open file %q, %v", err)
    }

    defer file.Close()
    
    downloader := s3manager.NewDownloader(sess)

    numBytes, err := downloader.Download(file,
    &s3.GetObjectInput{
        Bucket: aws.String(bucket),
        Key:    aws.String(item),
    })
if err != nil {
    exitErrorf("Unable to download item %q, %v", item, err)
}

fmt.Println("Downloaded", file.Name(), numBytes, "bytes")
}   

bucket file deletion

To delete a file inside of a bucket

package main

import (
    "github.com/aws/aws-sdk-go/aws"
    "github.com/aws/aws-sdk-go/aws/session"
    "github.com/aws/aws-sdk-go/aws/credentials"
    "github.com/aws/aws-sdk-go/service/s3"
    "fmt"
    "os"
)


func exitErrorf(msg string, args ...interface{}) {
    fmt.Fprintf(os.Stderr, msg+"\n", args...)
    os.Exit(1)
}

func main() {

    配置同上

    if len(os.Args) != 3 {
        exitErrorf("Bucket and object name required\nUsage: %s bucket_name object_name",
            os.Args[0])
    }
    
    bucket := os.Args[1]
    obj := os.Args[2]
    
    svc := s3.New(sess)

    _, err = svc.DeleteObject(&s3.DeleteObjectInput{Bucket: aws.String(bucket), Key: aws.String(obj)})
    if err != nil {
        exitErrorf("Unable to delete object %q from bucket %q, %v", obj, bucket, err)
    }

    err = svc.WaitUntilObjectNotExists(&s3.HeadObjectInput{
        Bucket: aws.String(bucket),
        Key:    aws.String(obj),
    })

    fmt.Printf("Object %q successfully deleted\n", obj)
}

Code location

https://github.com/Alexanderklau/Go_poject/tree/master/Go-Storage

Guess you like

Origin www.cnblogs.com/Yemilice/p/11490918.html