golang code use s3

时间:2025-03-08 07:02:51

package server

 

import (

    "bytes"

    "crypto/sha256"

    "encoding/hex"

    "fmt"

    "io"

    "io/ioutil"

    "mime"

    "os"

    "path/filepath"

    "strings"

 

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

    "/aws/aws-sdk-go/service/s3"

)

 

type config struct {

    NoCompress  bool     `opts:"help=disable gzip "`

    S3Component string   `opts:"help=s3 component name"`

    Base        string   `opts:"help=base directory (defaults to cwd)"`

    Targets     []string `opts:"mode=arg, help=<target> file or directory to upload"`

}

 

var c = config{

    S3Component: "s3",

    Base:        "",

}

 

func (s *Server) DeleteXX(fileName string) (string, error) {

    sc := c.S3Component

    //ensure we have an s3 component

    bucket := [sc+"_Bucxx"]

    if bucket == "" {

        buckets := []string{}

        for k := range  {

            if (k, "_Bucket") {

                buckets = append(buckets, (k, "_Buckxx"))

            }

        }

        ("missing '%s' S3 component (found: %s)",

            sc, (buckets, ","))

    }

    prefix := [sc+"_Prefix"]

    if prefix == "" {

        ("missing prefix, should never happen")

    }

    key := prefix + "/" + fileName

    response, err := s.(&{

        Bucket: (bucket),

        Key:    (key),

    })

 

    if err != nil {

        return "", err

    }

 

    return (), nil

}

 

func (s *Server) ReadXX(fileName string) (string, error) {

    sc := c.S3Component

    //ensure s3 component exist

    bucket := [sc+"_Bucket"]

    if bucket == "" {

        buckets := []string{}

        for k := range  {

            if (k, "_Bucxx") {

                buckets = append(buckets, (k, "_Bucxx"))

            }

        }

        ("missing '%s' S3 component (found: %s)",

            sc, (buckets, ","))

    }

    prefix := [sc+"_Prefix"]

    if prefix == "" {

        ("missing prefix, should never happen")

    }

    key := prefix + "/" + fileName

    s.Printf("read bucket %s key %s", bucket, key)

    response, err := s.(&{

        Bucket: (bucket),

        Key:    (key),

    })

 

    if err != nil {

        return "", err

    }

    defer ()

    buf := new()

    ()

 

    return (), nil

}

 

func (s *Server) WriteS3Log(baseDir, file string) {

    sc := c.S3Component

    //ensure we have an s3 component

    bucket := [sc+"_Bucxx"]

    if bucket == "" {

        buckets := []string{}

        for k := range  {

            if (k, "_Bucxx") {

                buckets = append(buckets, (k, "_Bucket"))

            }

        }

        ("missing '%s' S3 component (found: %s)",

            sc, (buckets, ","))

    }

    prefix := [sc+"_Prexx"]

    if prefix == "" {

        ("missing prefix, should never happen")

    }

    (bucket, prefix, baseDir, file)

}

 

func (s *Server) LocalUploadToS3(bucket, prefix, baseDir, path string) {

    fileinfo, err := (path)

    if err != nil {

        ("stat-file: %s (%s)", err, path)

    }

    //upload file

    if !().IsRegular() {

        return //skip

    }

    //open

    f, err := (path)

    if err != nil {

        ("open-file: %s", err)

    }

    defer ()

    //compute hash during read

    h := ()

    r := (f, h)

    //create upload blob

    var blob []byte

    var encoding *string

    blob, err = (r)

    if err != nil {

        ("read-file: %s", err)

    }

    hash := ((nil))

    //find target key

    pathKey, err := (baseDir, path)

    if err != nil {

        panic("should have been validated")

    }

    pathKey = (pathKey, "/")

    key := prefix + "/" + pathKey

    //find mime type

    var ctype *string

    if s := ((key)); s != "" {

        ctype = (s)

    }

    //upload!

    _, err = s.(&{

        Metadata: map[string]*string{

            //NOTE: must be upper-camel-case

            "Sha256": (hash),

        },

        Bucket:          (bucket),

        Key:             (key),

        ContentEncoding: encoding,

        ContentType:     ctype,

        Body:            (blob),

    })

    if err != nil {

        ("s3-put: %s (%s/%s)", err, bucket, key)

    }

}