From c20fff55a6dfe701f524dceeda93cac8c9eb1042 Mon Sep 17 00:00:00 2001 From: Aliaksandr Valialkin Date: Wed, 30 Dec 2015 15:13:50 +0200 Subject: [PATCH] FS: detect file content-type with net/http.DetectContentType if the type cannot be determined by file extension --- fs.go | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/fs.go b/fs.go index ae5f17b..7c8127c 100644 --- a/fs.go +++ b/fs.go @@ -7,6 +7,7 @@ import ( "html" "io" "mime" + "net/http" "os" "path/filepath" "sort" @@ -836,8 +837,17 @@ func (h *fsHandler) newFSFile(f *os.File, fileInfo os.FileInfo, compressed bool) return nil, fmt.Errorf("too big file: %d bytes", n) } + // detect content-type ext := fileExtension(fileInfo.Name(), compressed) contentType := mime.TypeByExtension(ext) + if len(contentType) == 0 { + data := make([]byte, 512) + n, err := f.ReadAt(data, 0) + if err != nil && err != io.EOF { + return nil, fmt.Errorf("cannot read header of the file %q: %s", f.Name(), err) + } + contentType = http.DetectContentType(data[:n]) + } lastModified := fileInfo.ModTime() ff := &fsFile{