99 lines
1.9 KiB
Go
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"))
|
|
}
|