@@ -15,6 +15,7 @@ import (
15
15
"time"
16
16
17
17
humanize "github.com/dustin/go-humanize"
18
+ "github.com/gabriel-vasile/mimetype"
18
19
"github.com/ipfs/go-cid"
19
20
files "github.com/ipfs/go-ipfs-files"
20
21
dag "github.com/ipfs/go-merkledag"
@@ -376,10 +377,16 @@ func (i *gatewayHandler) serveFile(w http.ResponseWriter, req *http.Request, nam
376
377
} else {
377
378
ctype = mime .TypeByExtension (gopath .Ext (name ))
378
379
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 )
383
390
if err != nil {
384
391
http .Error (w , "seeker can't seek" , http .StatusInternalServerError )
385
392
return
0 commit comments