diff --git a/core/files/fileuploader/uploader.go b/core/files/fileuploader/uploader.go index 229dc3cdc..fa141074b 100644 --- a/core/files/fileuploader/uploader.go +++ b/core/files/fileuploader/uploader.go @@ -11,12 +11,13 @@ import ( "io/ioutil" "net/http" "os" + "path" "path/filepath" "strings" "time" "github.com/anyproto/any-sync/app" - "github.com/h2non/filetype" + "github.com/gabriel-vasile/mimetype" "github.com/anyproto/anytype-heart/core/block/cache" "github.com/anyproto/anytype-heart/core/block/simple" @@ -540,12 +541,13 @@ func (u *uploader) getOrCreateFileObject(ctx context.Context, addResult *files.A } func (u *uploader) detectType(buf *fileReader) model.BlockContentFileType { - b, err := buf.Peek(8192) - if err != nil && err != io.EOF { + mime, err := mimetype.DetectReader(buf) + if err != nil { + log.With("error", err).Error("detect MIME") return model.BlockContentFile_File } - tp, _ := filetype.Match(b) - return file.DetectTypeByMIME(u.name, tp.MIME.Value) + mediaType, _ := path.Split(mime.String()) + return file.DetectTypeByMIME(u.name, mediaType) } type FileComponent interface { diff --git a/core/files/options.go b/core/files/options.go index 9228e2966..f4a5c5720 100644 --- a/core/files/options.go +++ b/core/files/options.go @@ -4,9 +4,8 @@ import ( "fmt" "io" "io/ioutil" - "net/http" - "github.com/h2non/filetype" + "github.com/gabriel-vasile/mimetype" ) type AddOption func(*AddOptions) @@ -70,13 +69,8 @@ func (s *service) normalizeOptions(opts *AddOptions) error { return fmt.Errorf("failed to seek underlying reader: %w", err) } - t, err := filetype.Match(data) - if err != nil { - log.Warnf("filetype failed to match: %s", err) - opts.Media = http.DetectContentType(data) - } else { - opts.Media = t.MIME.Value - } + mime := mimetype.Detect(data) + opts.Media = mime.String() } return nil diff --git a/go.mod b/go.mod index 913854040..91471e8e2 100644 --- a/go.mod +++ b/go.mod @@ -29,6 +29,7 @@ require ( github.com/dsoprea/go-exif/v3 v3.0.1 github.com/dsoprea/go-jpeg-image-structure/v2 v2.0.0-20221012074422-4f3f7e934102 github.com/ethereum/go-ethereum v1.13.15 + github.com/gabriel-vasile/mimetype v1.4.8 github.com/gin-gonic/gin v1.10.0 github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8 github.com/go-chi/chi/v5 v5.2.1 @@ -45,7 +46,6 @@ require ( github.com/grpc-ecosystem/go-grpc-middleware v1.4.0 github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0 github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 - github.com/h2non/filetype v1.1.3 github.com/hashicorp/go-multierror v1.1.1 github.com/hashicorp/yamux v0.1.2 github.com/hbagdi/go-unsplash v0.0.0-20230414214043-474fc02c9119 @@ -161,7 +161,6 @@ require ( github.com/flopp/go-findfont v0.1.0 // indirect github.com/fogleman/gg v1.3.0 // indirect github.com/fsnotify/fsnotify v1.6.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.6 // indirect github.com/gammazero/deque v1.0.0 // indirect github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-errors/errors v1.4.2 // indirect diff --git a/go.sum b/go.sum index 8568f839c..3cc4b5a29 100644 --- a/go.sum +++ b/go.sum @@ -311,8 +311,8 @@ github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMo github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= -github.com/gabriel-vasile/mimetype v1.4.6 h1:3+PzJTKLkvgjeTbts6msPJt4DixhT4YtFNf1gtGe3zc= -github.com/gabriel-vasile/mimetype v1.4.6/go.mod h1:JX1qVKqZd40hUPpAfiNTe0Sne7hdfKSbOqqmkq8GCXc= +github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM= +github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8= github.com/gammazero/chanqueue v1.0.0 h1:FER/sMailGFA3DDvFooEkipAMU+3c9Bg3bheloPSz6o= github.com/gammazero/chanqueue v1.0.0/go.mod h1:fMwpwEiuUgpab0sH4VHiVcEoji1pSi+EIzeG4TPeKPc= github.com/gammazero/deque v1.0.0 h1:LTmimT8H7bXkkCy6gZX7zNLtkbz4NdS2z8LZuor3j34= @@ -527,8 +527,6 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645 h1:MJG/KsmcqMwFAkh8mTnAwhyKoB+sTAnY4CACC110tbU= github.com/grpc-ecosystem/grpc-opentracing v0.0.0-20180507213350-8e809c8a8645/go.mod h1:6iZfnjpejD4L/4DwD7NryNaJyCQdzwWwH2MWhCA90Kw= -github.com/h2non/filetype v1.1.3 h1:FKkx9QbD7HR/zjK1Ia5XiBsq9zdLi5Kf3zGyFTAFkGg= -github.com/h2non/filetype v1.1.3/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=