From d53df6794551ddc6c85cfec94d9a304c95266e6d Mon Sep 17 00:00:00 2001 From: Erik Dubbelboer Date: Thu, 20 Sep 2018 11:36:07 +0800 Subject: [PATCH] Fix Content-Type bug in FS Fixes #417 --- fs.go | 3 ++- fs_test.go | 22 ++++++++++++++++++++++ testdata/test.png | 1 + 3 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 testdata/test.png diff --git a/fs.go b/fs.go index 7314062..f0ea066 100644 --- a/fs.go +++ b/fs.go @@ -823,7 +823,8 @@ func (h *fsHandler) handleRequest(ctx *RequestCtx) { } } } - if len(ctx.Response.Header.ContentType()) == 0 { + hdr.noDefaultContentType = true + if len(hdr.ContentType()) == 0 { ctx.SetContentType(ff.contentType) } ctx.SetStatusCode(statusCode) diff --git a/fs_test.go b/fs_test.go index 78b1e13..92e5ac9 100644 --- a/fs_test.go +++ b/fs_test.go @@ -682,3 +682,25 @@ func testFileExtension(t *testing.T, path string, compressed bool, compressedFil t.Fatalf("unexpected file extension for file %q: %q. Expecting %q", path, ext, expectedExt) } } + +func TestServeFileContentType(t *testing.T) { + var ctx RequestCtx + var req Request + req.Header.SetMethod("GET") + req.SetRequestURI("http://foobar.com/baz") + ctx.Init(&req, nil, nil) + + ServeFile(&ctx, "testdata/test.png") + + var resp Response + s := ctx.Response.String() + br := bufio.NewReader(bytes.NewBufferString(s)) + if err := resp.Read(br); err != nil { + t.Fatalf("unexpected error: %s", err) + } + + expected := []byte("image/png") + if !bytes.Equal(resp.Header.ContentType(), expected) { + t.Fatalf("Unexpected Content-Type, expected: %q got %q", expected, resp.Header.ContentType()) + } +} diff --git a/testdata/test.png b/testdata/test.png new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/testdata/test.png @@ -0,0 +1 @@ +