65 lines
1.3 KiB
Go
65 lines
1.3 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"fmt"
|
||
|
"github.com/flamego/flamego"
|
||
|
"github.com/minio/minio-go/v7"
|
||
|
"github.com/nfnt/resize"
|
||
|
"image"
|
||
|
"image/png"
|
||
|
"net/http"
|
||
|
"os"
|
||
|
"strconv"
|
||
|
)
|
||
|
|
||
|
func getImage(c flamego.Context) {
|
||
|
path := c.Request().FormValue("path")
|
||
|
img, err := s3.GetObject(c.Request().Context(), os.Getenv("S3_BUCKET"), path, minio.GetObjectOptions{})
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
defer img.Close()
|
||
|
|
||
|
imgO, _ , err := image.Decode(img)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
|
||
|
widthString := c.Request().FormValue("width")
|
||
|
heightString := c.Request().FormValue("height")
|
||
|
var width uint
|
||
|
var height uint
|
||
|
height = 0
|
||
|
width = 500
|
||
|
if widthString != "" {
|
||
|
w, _ := strconv.ParseUint(widthString, 10, 32)
|
||
|
width = uint(w)
|
||
|
}
|
||
|
|
||
|
if heightString != "" {
|
||
|
h, _ := strconv.ParseUint(heightString, 10, 32)
|
||
|
height = uint(h)
|
||
|
width = 0
|
||
|
}
|
||
|
|
||
|
if height == 250 || width == 500 {
|
||
|
//cache
|
||
|
}
|
||
|
m := resize.Resize(width, height, imgO, resize.Lanczos3)
|
||
|
|
||
|
buf := new(bytes.Buffer)
|
||
|
err = png.Encode(buf, m)
|
||
|
if err != nil {
|
||
|
panic(err)
|
||
|
}
|
||
|
send_s3 := buf.Bytes()
|
||
|
|
||
|
|
||
|
c.ResponseWriter().WriteHeader(http.StatusOK)
|
||
|
c.ResponseWriter().Header().Set("Content-Type", "application/octet-stream")
|
||
|
c.ResponseWriter().Header().Set("Content-Length", fmt.Sprintf("%v", len(send_s3)))
|
||
|
c.ResponseWriter().Write(send_s3)
|
||
|
return
|
||
|
}
|