# README
BFS
Multi-adapter bucket-based file system abstraction.
Documentation
For documentation and examples, please see https://godoc.org/github.com/bsm/bfs.
Install
go get -u github.com/bsm/bfs
Basic Usage
package main
import (
"fmt"
"github.com/bsm/bfs"
)
func main() {
ctx := context.Background()
bucket := bfs.NewInMem()
// Write object
o1, err := bucket.Create(ctx, "nested/file.txt", nil)
if err != nil {
panic(err)
}
defer o1.Discard()
if _, err := o1.Write([]byte("TESTDATA")); err != nil {
panic(err)
}
if err := o1.Commit(); err != nil {
panic(err)
}
// Glob entries
entries, err := bucket.Glob(ctx, "nested/**")
if err != nil {
panic(err)
}
fmt.Println("ENTRIES:", entries)
// Read object
o2, err := bucket.Open(ctx, "nested/file.txt")
if err != nil {
panic(err)
}
defer o2.Close()
data, err := io.ReadAll(o2)
if err != nil {
panic(err)
}
fmt.Println("DATA:", string(data))
// Head object
info, err := bucket.Head(ctx, "nested/file.txt")
if err != nil {
panic(err)
}
fmt.Printf("INFO: name=%q size=%d\n", info.Name, info.Size)
// Delete object
if err := bucket.Remove(ctx, "nested/file.txt"); err != nil {
panic(err)
}
}
# Packages
Package bfsaz abstracts Azure Blob Storage.
Package bfsfs abstracts local file system.
Package bfsftp abstracts an FTP file system.
Package bfsgs abstracts Google Cloud Storage bucket.
Package bfss3 abstracts Amazon S3 bucket.
Package bfsscp abstracts an SSH/SCP workflow
When imported, it registers both `scp://` and `ssh://` global scheme resolver and can be used like:
import ( "github.com/bsm/bfs"
_ "github.com/bsm/bfs/bfsscp" )
func main() { ctx := context.Background() b, _ := bfs.Connect(ctx, "ssh://user:pass@hostname:22/path/to/root?tmpdir=%2Fcustom%2Ftmp") f, _ := b.Open(ctx, "file/within/root.txt") ..
# Functions
Connect connects to a bucket via URL.
CopyObject is a quick helper to copy objects within the same bucket.
NewInMem returns an initialised Bucket.
NewInMemObject returns a new in-memory object.
NewObject inits a new object from an URL string.
NewObjectFromBucket inits a new object from an existing bucket.
NormMetadata canonicalizes kv pairs (inline) and returns the result.
Register registers a new protocol with a scheme and a corresponding resolver.
Resolve opens a bucket from a URL.
Unregister removes a registered scheme.
WriteObject is a quick write helper.
# Variables
ErrNotFound must be returned by all implementations when a requested object cannot be found.
# Structs
InMem is an in-memory Bucket implementation which can be used for mocking.
MetaInfo contains meta information about an object.
Object is a handle for a single file/object on a Bucket.
WriteOptions provide optional configuration when creating/writing objects.