Extract file reading into a dedicated function

This commit is contained in:
Julien Loir 2020-12-03 18:56:11 +01:00
parent 3b74029907
commit e432723e20
2 changed files with 25 additions and 22 deletions

View File

@ -144,29 +144,12 @@ func (i *FileInfo) detectType(modify, saveContent bool) error {
// of files couldn't be opened: we'd have immediately
// a 500 even though it doesn't matter. So we just log it.
readLen := 0
buffer := make([]byte, 0)
var buffer []byte
mimetype := mime.TypeByExtension(i.Extension)
if mimetype == "" {
reader, err := i.Fs.Open(i.Path)
if err != nil {
log.Print(err)
i.Type = "blob"
return nil
}
defer reader.Close()
buffer = make([]byte, 512)
n, err := reader.Read(buffer)
if err != nil && err != io.EOF {
log.Print(err)
i.Type = "blob"
return nil
}
readLen = n
mimetype = http.DetectContentType(buffer[:n])
buffer = i.readFirstBytes()
mimetype = http.DetectContentType(buffer)
}
switch {
@ -180,7 +163,7 @@ func (i *FileInfo) detectType(modify, saveContent bool) error {
case strings.HasPrefix(mimetype, "image"):
i.Type = "image"
return nil
case readLen > 0 && (isBinary(buffer[:readLen], readLen) || i.Size > 10*1024*1024): // 10 MB
case (len(buffer) > 0 && isBinary(buffer)) || i.Size > 10*1024*1024: // 10 MB
i.Type = "blob"
return nil
default:
@ -204,6 +187,26 @@ func (i *FileInfo) detectType(modify, saveContent bool) error {
return nil
}
func (i *FileInfo) readFirstBytes() []byte {
reader, err := i.Fs.Open(i.Path)
if err != nil {
log.Print(err)
i.Type = "blob"
return nil
}
defer reader.Close()
buffer := make([]byte, 512)
n, err := reader.Read(buffer)
if err != nil && err != io.EOF {
log.Print(err)
i.Type = "blob"
return nil
}
return buffer[:n]
}
func (i *FileInfo) detectSubtitles() {
if i.Type != "video" {
return

View File

@ -5,7 +5,7 @@ import (
"unicode/utf8"
)
func isBinary(content []byte, _ int) bool {
func isBinary(content []byte) bool {
maybeStr := string(content)
runeCnt := utf8.RuneCount(content)
runeIndex := 0