Some more fixes in detecting the mimetype from the content
Signed-off-by: Joas Schilling <coding@schilljs.com>
This commit is contained in:
parent
0f3fe7be2c
commit
1fe16ca6f5
|
@ -178,7 +178,7 @@ class Detection implements IMimeTypeDetector {
|
||||||
if (strpos($fileName, '.') > 0) {
|
if (strpos($fileName, '.') > 0) {
|
||||||
|
|
||||||
// remove versioning extension: name.v1508946057 and transfer extension: name.ocTransferId2057600214.part
|
// remove versioning extension: name.v1508946057 and transfer extension: name.ocTransferId2057600214.part
|
||||||
$fileName = preg_replace('!((\.v\d+)|((.ocTransferId\d+)?.part))$!', '', $fileName);
|
$fileName = preg_replace('!((\.v\d+)|((\.ocTransferId\d+)?\.part))$!', '', $fileName);
|
||||||
|
|
||||||
//try to guess the type by the file extension
|
//try to guess the type by the file extension
|
||||||
$extension = strtolower(strrchr($fileName, '.'));
|
$extension = strtolower(strrchr($fileName, '.'));
|
||||||
|
@ -206,38 +206,46 @@ class Detection implements IMimeTypeDetector {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (function_exists('finfo_open')
|
if (function_exists('finfo_open')
|
||||||
and function_exists('finfo_file') and $finfo = finfo_open(FILEINFO_MIME)
|
&& function_exists('finfo_file')
|
||||||
) {
|
&& $finfo = finfo_open(FILEINFO_MIME)) {
|
||||||
$info = @strtolower(finfo_file($finfo, $path));
|
$info = @finfo_file($finfo, $path);
|
||||||
finfo_close($finfo);
|
finfo_close($finfo);
|
||||||
if ($info) {
|
if ($info) {
|
||||||
|
$info = strtolower($info);
|
||||||
$mimeType = strpos($info, ';') !== false ? substr($info, 0, strpos($info, ';')) : $info;
|
$mimeType = strpos($info, ';') !== false ? substr($info, 0, strpos($info, ';')) : $info;
|
||||||
return empty($mimeType) ? 'application/octet-stream' : $mimeType;
|
return $this->getSecureMimeType($mimeType);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
$isWrapped = (strpos($path, '://') !== false) and (substr($path, 0, 7) === 'file://');
|
|
||||||
if (!$isWrapped and function_exists("mime_content_type")) {
|
if (strpos($path, '://') !== false && strpos($path, 'file://') === 0) {
|
||||||
|
// Is the file wrapped in a stream?
|
||||||
|
return 'application/octet-stream';
|
||||||
|
}
|
||||||
|
|
||||||
|
if (function_exists('mime_content_type')) {
|
||||||
// use mime magic extension if available
|
// use mime magic extension if available
|
||||||
$mimeType = mime_content_type($path);
|
$mimeType = mime_content_type($path);
|
||||||
|
if ($mimeType !== false) {
|
||||||
|
return $this->getSecureMimeType($mimeType);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (!$isWrapped and $mimeType === 'application/octet-stream' && \OC_Helper::canExecute("file")) {
|
|
||||||
|
if (\OC_Helper::canExecute('file')) {
|
||||||
// it looks like we have a 'file' command,
|
// it looks like we have a 'file' command,
|
||||||
// lets see if it does have mime support
|
// lets see if it does have mime support
|
||||||
$path = escapeshellarg($path);
|
$path = escapeshellarg($path);
|
||||||
$fp = popen("file -b --mime-type $path 2>/dev/null", "r");
|
$fp = popen("test -f $path && file -b --mime-type $path", 'r');
|
||||||
$reply = fgets($fp);
|
$mimeType = fgets($fp);
|
||||||
pclose($fp);
|
pclose($fp);
|
||||||
|
|
||||||
//trim the newline
|
if ($mimeType !== false) {
|
||||||
$mimeType = trim($reply);
|
//trim the newline
|
||||||
|
$mimeType = trim($mimeType);
|
||||||
if (empty($mimeType)) {
|
return $this->getSecureMimeType($mimeType);
|
||||||
$mimeType = 'application/octet-stream';
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return $mimeType;
|
return 'application/octet-stream';
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in New Issue