2024-07-03 18:33:46 +00:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
2024-07-03 19:28:20 +00:00
|
|
|
"io"
|
|
|
|
"os"
|
|
|
|
"strings"
|
2024-07-03 18:33:46 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
"github.com/dchest/uniuri"
|
2024-07-03 18:33:46 +00:00
|
|
|
"github.com/gofiber/fiber/v2"
|
2024-07-03 19:28:20 +00:00
|
|
|
"github.com/gofiber/fiber/v2/middleware/compress"
|
2024-07-03 18:33:46 +00:00
|
|
|
"github.com/gofiber/fiber/v2/middleware/logger"
|
2024-07-03 19:28:20 +00:00
|
|
|
"github.com/h2non/bimg"
|
2024-07-03 18:33:46 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
app := fiber.New()
|
|
|
|
app.Use(logger.New())
|
2024-07-03 19:28:20 +00:00
|
|
|
app.Use(compress.New(compress.Config{
|
|
|
|
Level: compress.LevelBestCompression,
|
|
|
|
}))
|
2024-07-03 18:33:46 +00:00
|
|
|
|
|
|
|
app.Get("/", func(c *fiber.Ctx) error {
|
|
|
|
return c.SendString("Sample")
|
|
|
|
})
|
|
|
|
|
2024-07-03 19:28:20 +00:00
|
|
|
app.Static("/images", "./public")
|
|
|
|
|
2024-07-03 18:33:46 +00:00
|
|
|
app.Post("/upload", func(c *fiber.Ctx) error {
|
|
|
|
if form, err := c.MultipartForm(); err == nil {
|
2024-07-04 16:52:51 +00:00
|
|
|
// Get string input
|
2024-07-03 18:33:46 +00:00
|
|
|
if token := form.Value["token"]; len(token) > 0 {
|
|
|
|
fmt.Println(token[0])
|
|
|
|
}
|
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
// Get image
|
|
|
|
files := form.File["document"]
|
|
|
|
if len(files) != 1 {
|
|
|
|
fmt.Println("bad request")
|
|
|
|
}
|
2024-07-03 18:33:46 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
file := form.File["document"][0]
|
|
|
|
fmt.Println(file.Filename, file.Size, file.Header["Content-Type"][0])
|
2024-07-03 19:28:20 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
newFile, err := file.Open()
|
|
|
|
if err != nil {
|
|
|
|
fmt.Fprintln(os.Stderr, err)
|
|
|
|
}
|
|
|
|
defer newFile.Close()
|
2024-07-03 19:28:20 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
data, err := io.ReadAll(newFile)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Fprintln(os.Stderr, err)
|
|
|
|
}
|
2024-07-03 19:28:20 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
// Compress image
|
|
|
|
newImage, err := bimg.NewImage(data).Convert(bimg.WEBP)
|
|
|
|
if err != nil {
|
|
|
|
fmt.Fprintln(os.Stderr, err)
|
|
|
|
}
|
2024-07-03 19:28:20 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
imageName := strings.Split(file.Filename, ".")[0]
|
2024-07-03 19:28:20 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
// Save image
|
|
|
|
bimg.Write(fmt.Sprintf("./public/%s.webp", imageName), newImage)
|
2024-07-03 19:28:20 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
// Generate public uri for the image
|
|
|
|
chars := uniuri.StdChars[26:52]
|
|
|
|
randomUri := uniuri.NewLenChars(10, chars)
|
|
|
|
imageUri := fmt.Sprintf("%s-%s-%s", randomUri[0:3], randomUri[3:7], randomUri[7:])
|
2024-07-03 19:28:20 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
fmt.Println(imageUri)
|
2024-07-03 18:33:46 +00:00
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
return c.SendStatus(fiber.StatusOK)
|
2024-07-03 18:33:46 +00:00
|
|
|
}
|
|
|
|
|
2024-07-04 16:52:51 +00:00
|
|
|
return c.SendStatus(fiber.StatusBadRequest)
|
2024-07-03 18:33:46 +00:00
|
|
|
})
|
|
|
|
|
|
|
|
app.Listen(":3000")
|
2024-07-03 19:28:20 +00:00
|
|
|
|
2024-07-03 18:33:46 +00:00
|
|
|
}
|