Categorygithub.com/bsm/bfs
modulepackage
0.11.9
Repository: https://github.com/bsm/bfs.git
Documentation: pkg.go.dev

# README

BFS

GoDoc Test

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.

# Interfaces

Bucket is an abstract storage bucket.
Iterator iterates over objects.
Reader is the interface that is returned by bucket.Open.
Writer is the interface that is returned by bucket.Create.

# Type aliases

Metadata contains metadata values.
Resolver constructs a bucket from a URL.