From ed3006d3592d35e3be0c82a71e1ee972ffb3eb3d Mon Sep 17 00:00:00 2001 From: Bel LaPointe Date: Thu, 23 Jul 2020 23:29:34 -0600 Subject: [PATCH] Set content type on response for static file serve --- view/files.go | 2 ++ view/files_test.go | 44 +++++++++++++++++++++++++++++++------------- 2 files changed, 33 insertions(+), 13 deletions(-) diff --git a/view/files.go b/view/files.go index b382dcd..18bbc0a 100644 --- a/view/files.go +++ b/view/files.go @@ -3,6 +3,7 @@ package view import ( "local/dndex/config" "local/dndex/storage" + "local/simpleserve/simpleserve" "net/http" "path" "strings" @@ -14,6 +15,7 @@ func files(_ storage.Graph, w http.ResponseWriter, r *http.Request) error { http.NotFound(w, r) return nil } + simpleserve.SetContentTypeIfMedia(w, r) switch r.Method { case http.MethodGet: return filesGet(w, r) diff --git a/view/files_test.go b/view/files_test.go index 8074252..8786194 100644 --- a/view/files_test.go +++ b/view/files_test.go @@ -9,6 +9,7 @@ import ( "net/http/httptest" "os" "path" + "strings" "testing" ) @@ -41,20 +42,37 @@ func TestFiles(t *testing.T) { } }) - t.Run("get text file", func(t *testing.T) { - f, err := ioutil.TempFile(d, "*.txt") - t.Logf("tempFile(%q, *.txt) = %q", d, f.Name()) - if err != nil { - t.Fatal(err) + t.Run("get typed files", func(t *testing.T) { + cases := map[string]string{ + "txt": "text/plain", + "jpeg": "image/jpeg", + "jpg": "image/jpeg", + "gif": "image/gif", + "mkv": "video/x-matroska", } - f.Write([]byte("hello, world")) - f.Close() - r := httptest.NewRequest(http.MethodGet, path.Join(config.New().FilePrefix, path.Base(f.Name())), nil) - w := httptest.NewRecorder() - t.Logf("URL = %q", r.URL.String()) - handler.ServeHTTP(w, r) - if w.Code != http.StatusOK { - t.Fatalf("%d: %s", w.Code, w.Body.Bytes()) + for ext, ct := range cases { + for _, extC := range []string{strings.ToLower(ext), strings.ToUpper(ext)} { + f, err := ioutil.TempFile(d, "*."+extC) + t.Logf("tempFile(%q, *.%s) = %q", d, extC, f.Name()) + if err != nil { + t.Fatal(err) + } + f.Write([]byte("hello, world")) + f.Close() + r := httptest.NewRequest(http.MethodGet, path.Join(config.New().FilePrefix, path.Base(f.Name())), nil) + w := httptest.NewRecorder() + t.Logf("URL = %q", r.URL.String()) + handler.ServeHTTP(w, r) + if w.Code != http.StatusOK { + t.Fatalf("%d: %s", w.Code, w.Body.Bytes()) + } + if contentType, ok := w.Header()["Content-Type"]; !ok { + t.Fatal(w.Header()) + } else if len(contentType) < 1 || !strings.HasPrefix(contentType[0], ct) { + t.Fatal(contentType, ", want:", ct) + } + t.Logf("%+v", w) + } } }) }