binaryimage/main.go
2025-02-28 23:34:15 +01:00

99 lines
1.9 KiB
Go

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"))
}