Filesystem
Store objects on disk for local development, tests, and single-node deployments.
Create the adapter
fs.New requires a root directory. The adapter prevents keys from escaping that root.
package main
import (
"context"
"fmt"
"os"
"path/filepath"
files "github.com/cersho/gofiles-sdk"
"github.com/cersho/gofiles-sdk/providers/fs"
)
func main() {
ctx := context.Background()
root, err := os.MkdirTemp("", "gofiles-*")
if err != nil {
panic(err)
}
defer os.RemoveAll(root)
adapter, err := fs.New(fs.Options{Root: root})
if err != nil {
panic(err)
}
client := files.MustNew(files.Options{Adapter: adapter})
_, err = client.Upload(ctx, "reports/q1.txt", files.StringBody("ready"), files.UploadOptions{})
if err != nil {
panic(err)
}
data, err := os.ReadFile(filepath.Join(root, "reports", "q1.txt"))
if err != nil {
panic(err)
}
fmt.Println(string(data))
// Output: ready
}Public URLs
Set URLBaseURL when files are served by your application or a static file server.
adapter, err := fs.New(fs.Options{
Root: "/srv/app/uploads",
URLBaseURL: "https://cdn.acme.internal/uploads",
})
if err != nil {
return err
}The filesystem adapter stores metadata in sidecar JSON files next to objects.