~oliverpool/tuspload-me

8dcb72a409460ac021a3e5de0fde13d29a21c3b1 — oliverpool 1 year, 8 months ago 9ae2edc
embed public
1 files changed, 40 insertions(+), 1 deletions(-)

M main.go
M main.go => main.go +40 -1
@@ 1,18 1,30 @@
package main

import (
	"embed"
	"fmt"
	"io/fs"
	"log"
	"net/http"
	"os"
	"path"

	"github.com/tus/tusd/pkg/filestore"
	tusd "github.com/tus/tusd/pkg/handler"
)

//go:embed public
var embedded embed.FS

func main() {
	err := server{
		PublicDir: http.Dir("./public"),
		PublicDir: http.FS(fallbackFS{
			primary: os.DirFS("./public"),
			fallback: subFS{
				folder: "public",
				fs:     embedded,
			},
		}),
		UploadDir: "./upload",
		Addr:      ":54321",
	}.run()


@@ 78,3 90,30 @@ func (s server) run() error {
	log.Println("Listening on " + s.Addr)
	return http.ListenAndServe(s.Addr, mux)
}

type fallbackFS struct {
	primary  fs.FS
	fallback fs.FS
}

func (fs fallbackFS) Open(name string) (fs.File, error) {
	f, errPrimary := fs.primary.Open(name)
	if errPrimary == nil {
		return f, nil
	}

	f, errFallback := fs.fallback.Open(name)
	if errFallback == nil {
		return f, nil
	}
	return nil, errPrimary
}

type subFS struct {
	folder string
	fs     fs.FS
}

func (s subFS) Open(name string) (fs.File, error) {
	return s.fs.Open(path.Join(s.folder, name))
}