1
0
Fork 0
mirror of https://github.com/anyproto/anytype-heart.git synced 2025-06-09 09:35:00 +09:00

Merge pull request #2164 from anyproto/go-4790-unable-to-embed-audio-files

GO-4790: Use better mimetype detection library
This commit is contained in:
Sergey 2025-02-26 14:19:55 +01:00 committed by mcrakhman
parent 870f86be87
commit 76d473031b
No known key found for this signature in database
GPG key ID: DED12CFEF5B8396B
4 changed files with 13 additions and 20 deletions

View file

@ -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 {

View file

@ -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

3
go.mod
View file

@ -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

6
go.sum
View file

@ -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=