This library is compatible with Go 1.11+
Please refer to CHANGELOG.md
if you encounter breaking changes.
This project provides various implementation for Abstract File Storage
import (
"context"
"fmt"
"github.com/viant/afs"
_ "github.com/viant/afsc/gs"
_ "github.com/viant/afsc/s3"
"io/io"
"log"
)
func main() {
fs := afs.New()
ctx := context.Background()
objects, err := fs.List(ctx, "gs://myBucket/folder")
if err != nil {
log.Fatal(err)
}
for _, object := range objects {
fmt.Printf("%v %v\n", object.Name(), object.URL())
if object.IsDir() {
continue
}
reader, err := fs.Download(ctx, object)
if err != nil {
log.Fatal(err)
}
defer reader.Close()
data, err := io.ReadAll(reader)
if err != nil {
log.Fatal(err)
}
fmt.Printf("%s\n", data)
}
err = fs.Copy(ctx, "gs://myBucket/folder", "s3://myBucket/cloned")
if err != nil {
log.Fatal(err)
}
}
- Uploading/downloading with secure key
customKey := s3.NewAES256Key([]byte("secret-key-that-is-32-bytes-long"))
ctx := context.Background()
fs := afs.New()
err := fs.Upload(ctx, "s3://mybucket/folder/secret1.txt", 0644, strings.NewReader("my secret text"), customKey)
if err != nil {
log.Fatal(err)
}
reader, err := fs.DownloadWithURL(ctx, "s3://mybucket/folder/secret1.txt", customKey)
data, err := io.ReadAll(reader)
if err != nil {
log.Fatal(err)
}
fmt.Printf("data: %s\n", data)
- Streaming data with low memory footprint.
_ = os.Setenv("AWS_SDK_LOAD_CONFIG", "true")
ctx := context.Background()
fs := afs.New()
sourceURL := "s3://myBucket/path/myasset.gz"
reader, err := fs.DownloadWithURL(ctx, sourceURL, option.NewStream(64*1024*1024, 0))
if err != nil {
log.Fatal(err)
}
jwtConfig, err := gs.NewJwtConfig()
if err != nil {
log.Fatal(err)
}
destURL := "gs://myBucket/path/myasset.gz"
err = fs.Upload(ctx, destURL, 0644, reader, jwtConfig, &option.Checksum{Skip:true})
if err != nil {
log.Fatal(err)
return
}
The source code is made available under the terms of the Apache License, Version 2, as stated in the file LICENSE
.
Individual files may be made available under their own specific license, all compatible with Apache License, Version 2. Please see individual files for details.
Library Author: Adrian Witas