Browse Source

Allow to check for the mimetype by content only

Signed-off-by: Joas Schilling <coding@schilljs.com>
Joas Schilling 4 years ago
parent
commit
a52c84b5b8
2 changed files with 30 additions and 8 deletions
  1. 21 7
      lib/private/Files/Type/Detection.php
  2. 9 1
      lib/public/Files/IMimeTypeDetector.php

+ 21 - 7
lib/private/Files/Type/Detection.php

@@ -192,12 +192,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)) {
@@ -205,9 +205,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));
@@ -219,7 +217,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);
 		}
@@ -242,6 +240,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
 	 *

+ 9 - 1
lib/public/Files/IMimeTypeDetector.php

@@ -39,9 +39,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
 	 *