Skip to content

Commit 2736c09

Browse files
committed
fix(serverHandler): output Content-Type header by HEAD method for file content
1 parent aa0fd37 commit 2736c09

File tree

1 file changed

+34
-3
lines changed

1 file changed

+34
-3
lines changed

src/serverHandler/content.go

Lines changed: 34 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,42 @@
11
package serverHandler
22

3-
import "net/http"
3+
import (
4+
"mime"
5+
"net/http"
6+
"os"
7+
"path"
8+
)
9+
10+
func getContentType(item os.FileInfo, file *os.File) (string, error) {
11+
ext := path.Ext(item.Name())
12+
ctype := mime.TypeByExtension(ext)
13+
if len(ctype) > 0 {
14+
return ctype, nil
15+
}
16+
17+
var buf [512]byte
18+
n, err := file.Read(buf[:])
19+
if err != nil {
20+
return ctype, err
21+
}
22+
23+
ctype = http.DetectContentType(buf[:n])
24+
return ctype, nil
25+
}
426

527
func (h *handler) content(w http.ResponseWriter, r *http.Request, data *responseData) {
28+
item := data.Item
29+
file := data.File
30+
631
if needResponseBody(r.Method) {
7-
item := data.Item
8-
file := data.File
932
http.ServeContent(w, r, item.Name(), item.ModTime(), file)
33+
return
34+
}
35+
36+
ctype, err := getContentType(item, file)
37+
if err == nil {
38+
w.Header().Set("Content-Type", ctype)
39+
} else {
40+
w.WriteHeader(http.StatusInternalServerError)
1041
}
1142
}

0 commit comments

Comments
 (0)