Something went wrong. Try again.
home to your local SPACEGIRL 💫 arimelody.space
Something went wrong. Try again.
1.3 kB · 56 lines
Go
at dev
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657package api
import ( "arimelody-web/log" "arimelody-web/model" "bufio" "encoding/base64" "errors" "fmt" "os" "path/filepath" "strings")
func HandleImageUpload(app *model.AppState, data *string, directory string, filename string) (string, error) { split := strings.Split(*data, ";base64,") header := split[0] imageData, err := base64.StdEncoding.DecodeString(split[1]) ext, _ := strings.CutPrefix(header, "data:image/") directory = filepath.Join(app.Config.DataDirectory, directory)
switch ext { case "png": case "jpg": case "jpeg": default: return "", errors.New("Invalid image type. Allowed: .png, .jpg, .jpeg") } filename = fmt.Sprintf("%s.%s", filename, ext)
// ensure directory exists os.MkdirAll(directory, os.ModePerm)
imagePath := filepath.Join(directory, filename) file, err := os.Create(imagePath) if err != nil { return "", err } defer file.Close()
// TODO: generate compressed versions of image (512x512?)
buffer := bufio.NewWriter(file) _, err = buffer.Write(imageData) if err != nil { return "", nil }
if err := buffer.Flush(); err != nil { return "", nil }
app.Log.Info(log.TYPE_FILES, "\"%s\" created.", imagePath)
return filename, nil}