2021-04-26 15:21:03 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2021-04-26 16:39:54 +00:00
|
|
|
"context"
|
|
|
|
"log"
|
|
|
|
"mime"
|
|
|
|
"net/url"
|
|
|
|
"path/filepath"
|
|
|
|
|
|
|
|
"github.com/minio/minio-go/v7"
|
|
|
|
"github.com/minio/minio-go/v7/pkg/credentials"
|
2021-04-26 15:21:03 +00:00
|
|
|
)
|
|
|
|
|
2021-04-26 16:39:54 +00:00
|
|
|
type S3Walker struct {
|
|
|
|
ctx context.Context
|
|
|
|
config *configCollect
|
|
|
|
mc *minio.Client
|
|
|
|
bucket string
|
|
|
|
}
|
|
|
|
func NewS3Walker(config *configCollect) *S3Walker {
|
|
|
|
sw := new(S3Walker)
|
|
|
|
|
|
|
|
sw.ctx = context.Background()
|
|
|
|
sw.config = config
|
|
|
|
|
|
|
|
u, err := url.Parse(config.Dest)
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if u.Scheme != "s3" { log.Fatal("URL must be of the following form: s3://ACCESS_KEY:SECRET_KEY@ENDPOINT/BUCKET") }
|
|
|
|
|
|
|
|
accessKeyID := u.User.Username()
|
|
|
|
secretAccessKey, _ := u.User.Password()
|
|
|
|
endpoint := u.Host
|
|
|
|
sw.bucket = u.Path
|
|
|
|
useSSL := true
|
|
|
|
|
|
|
|
// Initialize minio client object.
|
|
|
|
sw.mc, err = minio.New(endpoint, &minio.Options{
|
|
|
|
Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""),
|
|
|
|
Secure: useSSL,
|
|
|
|
})
|
|
|
|
if err != nil {
|
|
|
|
log.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
return sw
|
|
|
|
}
|
2021-04-26 15:21:03 +00:00
|
|
|
func (sw* S3Walker) onDir(dn *DirNode) {
|
|
|
|
}
|
|
|
|
func (sw* S3Walker) onFile(fn *FileNode) {
|
2021-04-26 16:39:54 +00:00
|
|
|
fn.Parse()
|
|
|
|
contentType := mime.TypeByExtension(filepath.Ext(fn.AbsolutePath))
|
|
|
|
info, err := sw.mc.PutObject(sw.ctx, sw.bucket, fn.AbsolutePath, fn, int64(fn.Elem.FileSize), minio.PutObjectOptions{ ContentType: contentType })
|
|
|
|
if err != nil {
|
|
|
|
log.Fatalln(err)
|
|
|
|
} else if info.Size != int64(fn.Elem.FileSize) {
|
|
|
|
log.Fatal("Uploaded",info.Size,"bytes but expected", fn.Elem.FileSize,"bytes")
|
|
|
|
}
|
|
|
|
log.Println(fn.String())
|
2021-04-26 15:21:03 +00:00
|
|
|
}
|