| 1234567891011121314151617181920212223242526272829303132333435363738394041424344 |
- package common
- import (
- "embed"
- "io/fs"
- "net/http"
- "os"
- "github.com/gin-contrib/static"
- )
- // Credit: https://github.com/gin-contrib/static/issues/19
- type embedFileSystem struct {
- http.FileSystem
- }
- func (e *embedFileSystem) Exists(prefix string, path string) bool {
- _, err := e.Open(path)
- if err != nil {
- return false
- }
- return true
- }
- func (e *embedFileSystem) Open(name string) (http.File, error) {
- if name == "/" {
- // This will make sure the index page goes to NoRouter handler,
- // which will use the replaced index bytes with analytic codes.
- return nil, os.ErrNotExist
- }
- return e.FileSystem.Open(name)
- }
- // requested subtree cannot be opened.
- func EmbedFolder(fsEmbed embed.FS, targetPath string) static.ServeFileSystem {
- efs, err := fs.Sub(fsEmbed, targetPath)
- if err != nil {
- panic(err)
- }
- return &embedFileSystem{
- FileSystem: http.FS(efs),
- }
- }
|