// Base64 ... func Base64(w http.ResponseWriter, r *http.Request) { render := marmoset.Render(w, true) var body = new(struct { Base64 string `json:"base64"` Trim string `json:"trim"` Languages string `json:"languages"` Whitelist string `json:"whitelist"` }) err := json.NewDecoder(r.Body).Decode(body) if err != nil { render.JSON(http.StatusBadRequest, err) return } tempfile, err := ioutil.TempFile("", config.AppName()+"-") if err != nil { render.JSON(http.StatusInternalServerError, err) return } defer func() { tempfile.Close() os.Remove(tempfile.Name()) }() if len(body.Base64) == 0 { render.JSON(http.StatusBadRequest, fmt.Errorf("base64 string required")) return } body.Base64 = regexp.MustCompile("data:image\\/png;base64,").ReplaceAllString(body.Base64, "") b, err := base64.StdEncoding.DecodeString(body.Base64) if err != nil { render.JSON(http.StatusBadRequest, err) return } tempfile.Write(b) // TODO: refactor gosseract body.Languages = "eng" result := gosseract.Must(gosseract.Params{ Src: tempfile.Name(), Languages: body.Languages, Whitelist: body.Whitelist, }) render.JSON(http.StatusOK, map[string]interface{}{ "result": strings.Trim(result, body.Trim), "version": config.Version(), }) }
// FileUpload ... func FileUpload(w http.ResponseWriter, r *http.Request) { render := marmoset.Render(w, true) whitelist := r.FormValue("whitelist") trim := r.FormValue("trim") // Get uploaded file r.ParseMultipartForm(32 << 20) // upload, h, err := r.FormFile("file") upload, _, err := r.FormFile("file") if err != nil { render.JSON(http.StatusBadRequest, err) return } defer upload.Close() // Create physical file tempfile, err := ioutil.TempFile("", config.AppName()+"-") if err != nil { render.JSON(http.StatusBadRequest, err) return } defer func() { tempfile.Close() os.Remove(tempfile.Name()) }() // Make uploaded physical if _, err := io.Copy(tempfile, upload); err != nil { render.JSON(http.StatusInternalServerError, err) return } result := gosseract.Must(gosseract.Params{ Src: tempfile.Name(), Languages: "eng", Whitelist: whitelist, }) render.JSON(http.StatusOK, map[string]interface{}{ "result": strings.Trim(result, trim), "version": config.Version(), }) }
// Status ... func Status(w http.ResponseWriter, r *http.Request) { marmoset.Render(w, true).JSON(http.StatusOK, map[string]interface{}{ "message": "Hello!", "version": config.Version(), }) }