我有以下函数从文件名生成mime类型:
return rtrim(strtr(base64_encode($token), '+/', '-_'), '=');
我在我的代码的这一部分调用了这个函数:
function get_mime_type($file) {
if (function_exists('finfo_open')) {
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$mimetype = finfo_file($finfo, $file);
finfo_close($finfo);
}
else {
$mimetype = mime_content_type($file);
}
if (empty($mimetype)) $mimetype = 'application/octet-stream';
return $mimetype;
}
$out['uploads'][] = array(
'filename' => $fldrow['field_value'],
'mimetype' => get_mime_type($fldrow['field_value']),
'id' => $fldrow['ID'],
);
包含$fldrow['field_value']
我期待'card.pdf'
我正在'application/pdf'
我还使用Mode = 1尝试了这种更精细的方法: PHP Mime type checking alternative way of doing it?
模式= 1时结果相同,模式= 0时为空白。
我可能在这里做错了什么?
EDIT 我的解决方案基于Dymen1的回应,在查看了该方向的其他帖子之后如下:
'application/octet-stream'
答案 0 :(得分:7)
如果您查看文档,则可以看到您没有做错任何事情。 但是,如果你做更多的研究:
https://stackoverflow.com/a/3664655/3784145
你可以看到你得到的mime类型是正确的,但扩展名不需要与mime类型匹配,如下所述:
http://nl3.php.net/manual/en/function.mime-content-type.php#85879
因此我会使用文件后缀来确定文件mime类型。 (如第一个例子所示)
答案 1 :(得分:0)
我试图使用mime_content_type()和get_mime_type()获取文件的mimeType,但是它不起作用。
这对我有用
$file = $request->file('FILE_NAME_IN_REQUEST');
$mimeType = $file->getClientmimeType();