improve mimetype detection

This commit is contained in:
Robin Appelman 2011-10-23 11:26:54 +02:00
parent 38bb503ff6
commit 122fa190c6
1 changed files with 12 additions and 9 deletions

View File

@ -126,18 +126,21 @@ class OC_Filestorage_Local extends OC_Filestorage{
public function getMimeType($fspath){ public function getMimeType($fspath){
if($this->is_readable($fspath)){ if($this->is_readable($fspath)){
$mimeType='application/octet-stream';
if (@is_dir($this->datadir.$fspath)) { if (@is_dir($this->datadir.$fspath)) {
// directories are easy // directories are easy
return "httpd/unix-directory"; return "httpd/unix-directory";
}elseif (function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)){ }
if($mimeType=='application/octet-stream' and function_exists('finfo_open') and function_exists('finfo_file') and $finfo=finfo_open(FILEINFO_MIME)){
$mimeType =strtolower(finfo_file($finfo,$this->datadir.$fspath)); $mimeType =strtolower(finfo_file($finfo,$this->datadir.$fspath));
$mimeType=substr($mimeType,0,strpos($mimeType,';')); $mimeType=substr($mimeType,0,strpos($mimeType,';'));
finfo_close($finfo); finfo_close($finfo);
return $mimeType; }
} else if (function_exists("mime_content_type")) { if ($mimeType=='application/octet-stream' && function_exists("mime_content_type")) {
// use mime magic extension if available // use mime magic extension if available
$mime_type = mime_content_type($this->datadir.$fspath); $mimeType = mime_content_type($this->datadir.$fspath);
} else if (OC_Helper::canExecute("file")) { }
if ($mimeType=='application/octet-stream' && OC_Helper::canExecute("file")) {
// it looks like we have a 'file' command, // it looks like we have a 'file' command,
// lets see it it does have mime support // lets see it it does have mime support
$fspath=str_replace("'","\'",$fspath); $fspath=str_replace("'","\'",$fspath);
@ -146,18 +149,18 @@ class OC_Filestorage_Local extends OC_Filestorage{
pclose($fp); pclose($fp);
//trim the character set from the end of the response //trim the character set from the end of the response
$mime_type=substr($reply,0,strrpos($reply,' ')); $mimeType=substr($reply,0,strrpos($reply,' '));
} }
if (empty($mime_type)) { if ($mimeType=='application/octet-stream') {
// Fallback solution: (try to guess the type by the file extension // Fallback solution: (try to guess the type by the file extension
if(!self::$mimetypes){ if(!self::$mimetypes){
self::$mimetypes=include('mimetypes.list.php'); self::$mimetypes=include('mimetypes.list.php');
} }
$extention=strtolower(strrchr(basename($fspath), ".")); $extention=strtolower(strrchr(basename($fspath), "."));
$extention=substr($extention,1);//remove leading . $extention=substr($extention,1);//remove leading .
$mime_type=(isset(self::$mimetypes[$extention]))?self::$mimetypes[$extention]:'application/octet-stream'; $mimeType=(isset(self::$mimetypes[$extention]))?self::$mimetypes[$extention]:'application/octet-stream';
} }
return $mime_type; return $mimeType;
} }
} }