FileServer/main.go

73 lines
1.3 KiB
Go
Raw Normal View History

2025-12-05 04:25:21 +00:00
package main
import (
"html/template"
"io"
"net/http"
"os"
"path/filepath"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
type Template struct {
templates *template.Template
}
func (t *Template) Render(w io.Writer, name string, data interface{}, c echo.Context) error {
return t.templates.ExecuteTemplate(w, name, data)
}
func upload(c echo.Context) error {
//-----------
// Read file
//-----------
// Source
file, err := c.FormFile("file")
if err != nil {
return err
}
src, err := file.Open()
if err != nil {
return err
}
defer src.Close()
// Destination
destinationPath := filepath.Join("files", file.Filename)
destinationUrl := filepath.Join("/files", file.Filename)
dst, err := os.Create(destinationPath)
if err != nil {
return err
}
defer dst.Close()
// Copy
if _, err = io.Copy(dst, src); err != nil {
return err
}
return c.Render(http.StatusOK, "uploaded", map[string]string{"URI": destinationUrl})
}
func main() {
t := &Template{
templates: template.Must(template.ParseGlob("views/templates/*.html")),
}
e := echo.New()
e.Renderer = t
e.Use(middleware.Logger())
e.Use(middleware.Recover())
e.Static("/files", "files")
e.Static("/assets", "assets")
e.File("/admin", "views/index.html")
e.POST("/admin/upload", upload)
e.Logger.Fatal(e.Start(":1323"))
}