galdric/server.go
server.goRaw
1package main
2
3import (
4 "fmt"
5 "log"
6 "net/http"
7 "time"
8
9 "github.com/gorilla/mux"
10)
11
12type ImageModel struct {
13 File []byte `json:"file"`
14}
15
16type Route struct {
17 Name string
18 Method string
19 Pattern string
20 HandlerFunc http.HandlerFunc
21}
22type Routes []Route
23
24var routes = Routes{
25 Route{
26 "Index",
27 "GET",
28 "/",
29 Index,
30 },
31 Route{
32 "NewImage",
33 "POST",
34 "/image",
35 NewImage,
36 },
37}
38
39func Logger(inner http.Handler, name string) http.Handler {
40 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
41 start := time.Now()
42
43 inner.ServeHTTP(w, r)
44
45 log.Printf(
46 "%s\t%s\t%s\t%s",
47 r.Method,
48 r.RequestURI,
49 name,
50 time.Since(start),
51 )
52 })
53}
54func NewRouter() *mux.Router {
55 router := mux.NewRouter().StrictSlash(true)
56 for _, route := range routes {
57 var handler http.Handler
58 handler = route.HandlerFunc
59 handler = Logger(handler, route.Name)
60
61 router.
62 Methods(route.Method).
63 Path(route.Pattern).
64 Name(route.Name).
65 Handler(handler)
66 }
67 return router
68}
69
70func Index(w http.ResponseWriter, r *http.Request) {
71 fmt.Fprintln(w, "send images to the /image path")
72}
73func NewImage(w http.ResponseWriter, r *http.Request) {
74 _, handler, err := r.FormFile("file")
75 check(err)
76
77 //imageName := strings.Split(handler.Filename, ".")[0]
78 //fileName := imageName + ".png"
79
80 //data, err := ioutil.ReadAll(file)
81 //check(err)
82 img := readImage(handler.Filename)
83 histogram := imageToHistogram(img)
84 result := knn(dataset, histogram)
85
86 c.Purple("seems to be a " + result)
87 fmt.Fprintln(w, "seems to be a "+result)
88}