package s3helper import ( "context" "log" "os" "github.com/minio/minio-go/v7" "github.com/minio/minio-go/v7/pkg/credentials" ) const ( ENDPOINT = "s3.us-west-004.backblazeb2.com" BUCKETNAME = "ducimon-db-backups" ) func UploadFile(ctx context.Context, b2Creds map[string]string) error { client := createClient(b2Creds["B2_KEY_ID"], b2Creds["B2_APPLICATION_KEY"]) verifyBucket(client, ctx) absolutePath, basename := validateUploadFile() _, err := client.FPutObject(ctx, BUCKETNAME, "test", absolutePath, minio.PutObjectOptions{}) if err != nil { log.Fatalln(err) } log.Printf("upload of %s complete\n", basename) return nil } func createClient(accessKeyID string, secretAccessKey string) *minio.Client { // Initialize minio client object. minioClient, err := minio.New(ENDPOINT, &minio.Options{ Creds: credentials.NewStaticV4(accessKeyID, secretAccessKey, ""), Secure: true, }) if err != nil { log.Fatalln(err) } return minioClient } func verifyBucket(client *minio.Client, ctx context.Context) { exists, err := client.BucketExists(ctx, BUCKETNAME) if err != nil { log.Fatalln(err) } if !exists { log.Fatalf("bucket %s does not exist\n", BUCKETNAME) } } func validateUploadFile() (string, string) { if len(os.Args) < 2 { log.Fatalln("upload file not specified") } file, err := os.Stat(os.Args[1]) if err != nil { log.Fatalln(err) } if file.IsDir() { log.Fatalln("upload of directories is not supported") } return os.Args[1], file.Name() }