From 8ac4d4cd0ce5998e8faa78f1caf36902f0bb6044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9?= Date: Tue, 28 May 2024 10:05:23 +0200 Subject: [PATCH] remove filesystem.md for v3 --- docs/core/middleware/filesystem.md | 300 ----------------------------- 1 file changed, 300 deletions(-) delete mode 100644 docs/core/middleware/filesystem.md diff --git a/docs/core/middleware/filesystem.md b/docs/core/middleware/filesystem.md deleted file mode 100644 index 01d50270ffb..00000000000 --- a/docs/core/middleware/filesystem.md +++ /dev/null @@ -1,300 +0,0 @@ ---- -id: filesystem ---- - -# FileSystem - -Filesystem middleware for [Fiber](https://github.com/gofiber/fiber) that enables you to serve files from a directory. - -:::caution -**`:params` & `:optionals?` within the prefix path are not supported!** - -**To handle paths with spaces (or other url encoded values) make sure to set `fiber.Config{ UnescapePath: true }`** -::: - -## Signatures - -```go -func New(config Config) fiber.Handler -``` - -## Examples - -Import the middleware package that is part of the Fiber web framework - -```go -import ( - "github.com/gofiber/fiber/v3" - "github.com/gofiber/fiber/v3/middleware/filesystem" -) -``` - -After you initiate your Fiber app, you can use the following possibilities: - -```go -// Provide a minimal config -app.Use(filesystem.New(filesystem.Config{ - Root: http.Dir("./assets"), -})) - -// Or extend your config for customization -app.Use(filesystem.New(filesystem.Config{ - Root: http.Dir("./assets"), - Browse: true, - Index: "index.html", - NotFoundFile: "404.html", - MaxAge: 3600, -})) -``` - - -> If your environment (Go 1.16+) supports it, we recommend using Go Embed instead of the other solutions listed as this one is native to Go and the easiest to use. - -## embed - -[Embed](https://golang.org/pkg/embed/) is the native method to embed files in a Golang excecutable. Introduced in Go 1.16. - -```go -package main - -import ( - "embed" - "io/fs" - "log" - "net/http" - - "github.com/gofiber/fiber/v3" - "github.com/gofiber/fiber/v3/middleware/filesystem" -) - -// Embed a single file -//go:embed index.html -var f embed.FS - -// Embed a directory -//go:embed static/* -var embedDirStatic embed.FS - -func main() { - app := fiber.New() - - app.Use("/", filesystem.New(filesystem.Config{ - Root: http.FS(f), - })) - - // Access file "image.png" under `static/` directory via URL: `http:///static/image.png`. - // Without `PathPrefix`, you have to access it via URL: - // `http:///static/static/image.png`. - app.Use("/static", filesystem.New(filesystem.Config{ - Root: http.FS(embedDirStatic), - PathPrefix: "static", - Browse: true, - })) - - log.Fatal(app.Listen(":3000")) -} -``` - -## pkger - -[https://github.com/markbates/pkger](https://github.com/markbates/pkger) - -```go -package main - -import ( - "github.com/gofiber/fiber/v3" - "github.com/gofiber/fiber/v3/middleware/filesystem" - - "github.com/markbates/pkger" -) - -func main() { - app := fiber.New() - - app.Use("/assets", filesystem.New(filesystem.Config{ - Root: pkger.Dir("/assets"), - })) - - log.Fatal(app.Listen(":3000")) -} -``` - -## packr - -[https://github.com/gobuffalo/packr](https://github.com/gobuffalo/packr) - -```go -package main - -import ( - "github.com/gofiber/fiber/v3" - "github.com/gofiber/fiber/v3/middleware/filesystem" - - "github.com/gobuffalo/packr/v2" -) - -func main() { - app := fiber.New() - - app.Use("/assets", filesystem.New(filesystem.Config{ - Root: packr.New("Assets Box", "/assets"), - })) - - log.Fatal(app.Listen(":3000")) -} -``` - -## go.rice - -[https://github.com/GeertJohan/go.rice](https://github.com/GeertJohan/go.rice) - -```go -package main - -import ( - "github.com/gofiber/fiber/v3" - "github.com/gofiber/fiber/v3/middleware/filesystem" - - "github.com/GeertJohan/go.rice" -) - -func main() { - app := fiber.New() - - app.Use("/assets", filesystem.New(filesystem.Config{ - Root: rice.MustFindBox("assets").HTTPBox(), - })) - - log.Fatal(app.Listen(":3000")) -} -``` - -## fileb0x - -[https://github.com/UnnoTed/fileb0x](https://github.com/UnnoTed/fileb0x) - -```go -package main - -import ( - "github.com/gofiber/fiber/v3" - "github.com/gofiber/fiber/v3/middleware/filesystem" - - "/myEmbeddedFiles" -) - -func main() { - app := fiber.New() - - app.Use("/assets", filesystem.New(filesystem.Config{ - Root: myEmbeddedFiles.HTTP, - })) - - log.Fatal(app.Listen(":3000")) -} -``` - -## statik - -[https://github.com/rakyll/statik](https://github.com/rakyll/statik) - -```go -package main - -import ( - "github.com/gofiber/fiber/v3" - "github.com/gofiber/fiber/v3/middleware/filesystem" - - // Use blank to invoke init function and register data to statik - _ "/statik" - "github.com/rakyll/statik/fs" -) - -func main() { - statikFS, err := fs.New() - if err != nil { - panic(err) - } - - app := fiber.New() - - app.Use("/", filesystem.New(filesystem.Config{ - Root: statikFS, - })) - - log.Fatal(app.Listen(":3000")) -} -``` - -## Config - -| Property | Type | Description | Default | -|:-------------------|:------------------------|:------------------------------------------------------------------------------------------------------------|:-------------| -| Next | `func(fiber.Ctx) bool` | Next defines a function to skip this middleware when returned true. | `nil` | -| Root | `http.FileSystem` | Root is a FileSystem that provides access to a collection of files and directories. | `nil` | -| PathPrefix | `string` | PathPrefix defines a prefix to be added to a filepath when reading a file from the FileSystem. | "" | -| Browse | `bool` | Enable directory browsing. | `false` | -| Index | `string` | Index file for serving a directory. | "index.html" | -| MaxAge | `int` | The value for the Cache-Control HTTP-header that is set on the file response. MaxAge is defined in seconds. | 0 | -| NotFoundFile | `string` | File to return if the path is not found. Useful for SPA's. | "" | -| ContentTypeCharset | `string` | The value for the Content-Type HTTP-header that is set on the file response. | "" | - -## Default Config - -```go -var ConfigDefault = Config{ - Next: nil, - Root: nil, - PathPrefix: "", - Browse: false, - Index: "/index.html", - MaxAge: 0, - ContentTypeCharset: "", -} -``` - -## Utils - -### SendFile - -Serves a file from an [HTTP file system](https://pkg.go.dev/net/http#FileSystem) at the specified path. - -```go title="Signature" title="Signature" -func SendFile(c fiber.Ctx, filesystem http.FileSystem, path string) error -``` -Import the middleware package that is part of the Fiber web framework - -```go -import ( - "github.com/gofiber/fiber/v3" - "github.com/gofiber/fiber/v3/middleware/filesystem" -) -``` - -```go title="Example" -// Define a route to serve a specific file -app.Get("/download", func(c fiber.Ctx) error { - // Serve the file using SendFile function - err := filesystem.SendFile(c, http.Dir("your/filesystem/root"), "path/to/your/file.txt") - if err != nil { - // Handle the error, e.g., return a 404 Not Found response - return c.Status(fiber.StatusNotFound).SendString("File not found") - } - - return nil -}) -``` - -```go title="Example" -// Serve static files from the "build" directory using Fiber's built-in middleware. -app.Use("/", filesystem.New(filesystem.Config{ - Root: http.FS(f), // Specify the root directory for static files. - PathPrefix: "build", // Define the path prefix where static files are served. -})) - -// For all other routes (wildcard "*"), serve the "index.html" file from the "build" directory. -app.Use("*", func(ctx fiber.Ctx) error { - return filesystem.SendFile(ctx, http.FS(f), "build/index.html") -}) -```