package main import ( "flag" "fmt" "io" "log" "github.com/gofiber/fiber/v2" "github.com/gofiber/template/html/v2" "github.com/spf13/pflag" "github.com/spf13/viper" ) func main() { viper.SetEnvPrefix("BI") viper.AutomaticEnv() flag.Int("MAX_FILE_SIZE", 1073741824, "Max file size in bytes") flag.Parse() err := viper.BindPFlags(pflag.CommandLine) if err != nil { fmt.Println(err) return } maxFileSize := viper.GetInt("MAX_FILE_SIZE") engine := html.New("views", ".html") app := fiber.New(fiber.Config{ Views: engine, BodyLimit: maxFileSize, }) maxFileSizeString := fileSizeToString(maxFileSize) nav := []NavItem{ NewNavItem("/", "Generator"), NewNavItem("/rendertypes", "Rendertypes"), } app.Static("/", "static") app.Get("/", func(c *fiber.Ctx) error { return c.Render("index", fiber.Map{ "Stylenames": []string{"colors", "main", "index"}, "NavItems": nav, "ActivePage": "/", "MaxFileSize": maxFileSizeString, }) }) app.Get("/rendertypes", func(c *fiber.Ctx) error { return c.Render("rendertypes", fiber.Map{ "Stylenames": []string{"colors", "main", "rendertypes"}, "NavItems": nav, "ActivePage": "/rendertypes", }) }) app.Post("/generate", func(c *fiber.Ctx) error { c.Accepts("multipart/form-data") file, err := c.FormFile("file") if err != nil { return err } openedFile, err := file.Open() if err != nil { return err } data, err := io.ReadAll(openedFile) if err != nil { return err } renderType := c.FormValue("rendertype", "snake") var img []byte switch renderType { case "snake": img, err = SnakeGenerateByteImage(data) default: img, err = HilbertCurveGenerateByteImage(data) } if err != nil { return err } c.Type("bmp") c.Set("Content-Disposition", fmt.Sprintf("filename=\"%s\"", file.Filename+".bmp")) //attachment; return c.Send(img) }) log.Fatal(app.Listen(":3000")) }