Skip to content

Commit 01e27f9

Browse files
authored
Merge pull request #7262 from gowthamgts/fix/http/content-type
Fixes #7252 - Uses gabriel-vasile/mimetype to support additional content types
2 parents 6c1bf89 + c548782 commit 01e27f9

File tree

3 files changed

+15
-4
lines changed

3 files changed

+15
-4
lines changed

core/corehttp/gateway_handler.go

+11-4
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"time"
1616

1717
humanize "github.com/dustin/go-humanize"
18+
"github.com/gabriel-vasile/mimetype"
1819
"github.com/ipfs/go-cid"
1920
files "github.com/ipfs/go-ipfs-files"
2021
dag "github.com/ipfs/go-merkledag"
@@ -376,10 +377,16 @@ func (i *gatewayHandler) serveFile(w http.ResponseWriter, req *http.Request, nam
376377
} else {
377378
ctype = mime.TypeByExtension(gopath.Ext(name))
378379
if ctype == "" {
379-
buf := make([]byte, 512)
380-
n, _ := io.ReadFull(content, buf[:])
381-
ctype = http.DetectContentType(buf[:n])
382-
_, err := content.Seek(0, io.SeekStart)
380+
// uses https://github.com/gabriel-vasile/mimetype library to determine the content type.
381+
// Fixes https://github.com/ipfs/go-ipfs/issues/7252
382+
mimeType, err := mimetype.DetectReader(content)
383+
if err != nil {
384+
http.Error(w, fmt.Sprintf("cannot detect content-type: %s", err.Error()), http.StatusInternalServerError)
385+
return
386+
}
387+
388+
ctype = mimeType.String()
389+
_, err = content.Seek(0, io.SeekStart)
383390
if err != nil {
384391
http.Error(w, "seeker can't seek", http.StatusInternalServerError)
385392
return

go.mod

+1
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ require (
1010
github.com/elgris/jsondiff v0.0.0-20160530203242-765b5c24c302
1111
github.com/fatih/color v1.9.0 // indirect
1212
github.com/fsnotify/fsnotify v1.4.9
13+
github.com/gabriel-vasile/mimetype v1.1.0
1314
github.com/go-bindata/go-bindata/v3 v3.1.3
1415
github.com/gogo/protobuf v1.3.1
1516
github.com/hashicorp/go-multierror v1.1.0

go.sum

+3
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,8 @@ github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV
117117
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
118118
github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4=
119119
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
120+
github.com/gabriel-vasile/mimetype v1.1.0 h1:+ahX+MvQPFve4kO9Qjjxf3j49i0ACdV236kJlOCRAnU=
121+
github.com/gabriel-vasile/mimetype v1.1.0/go.mod h1:6CDPel/o/3/s4+bp6kIbsWATq8pmgOisOPG40CJa6To=
120122
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
121123
github.com/gliderlabs/ssh v0.1.1/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0=
122124
github.com/go-bindata/go-bindata/v3 v3.1.3 h1:F0nVttLC3ws0ojc7p60veTurcOm//D4QBODNM7EGrCI=
@@ -1196,6 +1198,7 @@ golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7w
11961198
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae h1:/WDfKMnPU+m5M4xB+6x4kaepxRw6jWvR5iDRdvjHgy8=
11971199
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
11981200
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
1201+
golang.org/x/sys v0.0.0-20200413165638-669c56c373c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
11991202
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f h1:gWF768j/LaZugp8dyS4UwsslYCYz9XgFxvlgsn0n9H8=
12001203
golang.org/x/sys v0.0.0-20200420163511-1957bb5e6d1f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
12011204
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=

0 commit comments

Comments
 (0)