diff --git a/lib/private/Files/Type/Detection.php b/lib/private/Files/Type/Detection.php index 8505f59bac..60d0eec9d9 100644 --- a/lib/private/Files/Type/Detection.php +++ b/lib/private/Files/Type/Detection.php @@ -213,12 +213,12 @@ class Detection implements IMimeTypeDetector { } /** - * detect mimetype based on both filename and content - * + * detect mimetype only based on the content of file * @param string $path * @return string + * @since 18.0.0 */ - public function detect($path) { + public function detectContent(string $path): string { $this->loadMappings(); if (@is_dir($path)) { @@ -226,9 +226,7 @@ class Detection implements IMimeTypeDetector { return "httpd/unix-directory"; } - $mimeType = $this->detectPath($path); - - if ($mimeType === 'application/octet-stream' and function_exists('finfo_open') + if (function_exists('finfo_open') and function_exists('finfo_file') and $finfo = finfo_open(FILEINFO_MIME) ) { $info = @strtolower(finfo_file($finfo, $path)); @@ -240,7 +238,7 @@ class Detection implements IMimeTypeDetector { } $isWrapped = (strpos($path, '://') !== false) and (substr($path, 0, 7) === 'file://'); - if (!$isWrapped and $mimeType === 'application/octet-stream' && function_exists("mime_content_type")) { + if (!$isWrapped and function_exists("mime_content_type")) { // use mime magic extension if available $mimeType = mime_content_type($path); } @@ -263,6 +261,22 @@ class Detection implements IMimeTypeDetector { return $mimeType; } + /** + * detect mimetype based on both filename and content + * + * @param string $path + * @return string + */ + public function detect($path) { + $mimeType = $this->detectPath($path); + + if ($mimeType !== 'application/octet-stream') { + return $mimeType; + } + + return $this->detectContent($path); + } + /** * detect mimetype based on the content of a string * diff --git a/lib/public/Files/IMimeTypeDetector.php b/lib/public/Files/IMimeTypeDetector.php index 3d26860c74..3686405b52 100644 --- a/lib/public/Files/IMimeTypeDetector.php +++ b/lib/public/Files/IMimeTypeDetector.php @@ -40,9 +40,17 @@ interface IMimeTypeDetector { * @param string $path * @return string * @since 8.2.0 - **/ + */ public function detectPath($path); + /** + * detect mimetype only based on the content of file + * @param string $path + * @return string + * @since 18.0.0 + */ + public function detectContent(string $path): string; + /** * detect mimetype based on both filename and content *