diff options
Diffstat (limited to 'internal/image/handler.go')
| -rw-r--r-- | internal/image/handler.go | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/internal/image/handler.go b/internal/image/handler.go index 8988a58..2db4c40 100644 --- a/internal/image/handler.go +++ b/internal/image/handler.go @@ -5,6 +5,8 @@ import ( "io/ioutil" "log" "net/http" + + "github.com/go-chi/chi" ) var fileTypes = map[string]string{ @@ -27,9 +29,22 @@ type imageHandler struct { service Servicer } +// GetImage handler for returning an image func (h *imageHandler) GetImage(w http.ResponseWriter, r *http.Request) { - log.Print("serving image") - http.ServeFile(w, r, "foo.jpg") + fileID := chi.URLParam(r, "fileName") + fileMeta, err := h.service.GetFile(fileID) + if err != nil { + w.WriteHeader(400) + log.Printf("error: %+v", err) + w.Write([]byte("WTF Incorrect Content Type")) + } + fileUrl := fmt.Sprintf("/f/%s", fileMeta.FilePath) + data := struct { + ImageUrl string + }{ + fileUrl, + } + h.service.Render(w, "image.tmpl", data) } // PostImage handler for creating an image post @@ -39,6 +54,7 @@ func (h *imageHandler) PostImage(w http.ResponseWriter, r *http.Request) { file, handler, err := r.FormFile("file") if err != nil { log.Printf("%s", err) + return } defer file.Close() fileBytes, err := ioutil.ReadAll(file) @@ -63,9 +79,14 @@ func (h *imageHandler) PostImage(w http.ResponseWriter, r *http.Request) { w.Write([]byte("Incorrect Content Type")) return } - fileID, err := h.service.NewID() - fileName := fmt.Sprintf("%s.%s", fileID, extension) - h.service.AddFile(fileName, fileBytes) + fileName, fileID, err := h.service.AddFile(extension, fileType, fileBytes) + if err != nil { + log.Printf("failed to write file") + w.WriteHeader(500) + w.Write([]byte("An Internal Error Occured")) + return + } w.WriteHeader(201) - w.Write([]byte("ok")) + w.Write([]byte(fmt.Sprintf("%s %s", fileName, fileID))) + return } |