有没有办法找出Linux bash脚本中的文件的MIME类型(或称为"Content-Type"?)?
我需要它的原因是因为ImageShack似乎需要它来上传文件,因为它将某个.png文件检测为application/octet-stream文件.
我检查了文件,它确实是一个PNG图像:
$ cat /1.png
?PNG
(with a heap load of random characters)
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
$ curl -F "fileupload=@/1.png" http://www.imageshack.us/upload_api.php
<links>
<error id="wrong_file_type">Wrong file type detected for file 1.png:application/octet-stream</error>
</links>
Run Code Online (Sandbox Code Playgroud)
这有效,但我需要指定MIME-TYPE.
$ curl -F "fileupload=@/1.png;type=image/png" http://www.imageshack.us/upload_api.php
Run Code Online (Sandbox Code Playgroud) 当我调用mime_content_type($ mp3_file_path)时,为什么在某些mp3文件中它返回application/octet-stream?
我有这个:
if (!empty($_FILES)) {
$tempFile = $_FILES['Filedata']['tmp_name'];
$image = getimagesize($tempFile);
$mp3_mimes = array('audio/mpeg', 'audio/x-mpeg', 'audio/mp3', 'audio/x-mp3', 'audio/mpeg3', 'audio/x-mpeg3', 'audio/mpg', 'audio/x-mpg', 'audio/x-mpegaudio');
if (in_array(mime_content_type($tempFile), $mp3_mimes)) {
echo json_encode("mp3");
} elseif ($image['mime']=='image/jpeg') {
echo json_encode("jpg");
} else{
echo json_encode("error");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑: 我在这里找到了一个很好的课程:
http://www.zedwood.com/article/127/php-calculate-duration-of-mp3
我正在使用PHP上传表格,只允许MP3文件.
上传完成后,我分析文件以检查它是否真的是MP3.第一步是将mime类型检测为audio/mpeg.我使用库finfo_file()并且工作正常,但在测试期间,一些MP3文件被拒绝,因为它们的MIME类型结果为application/octet-stream.
我的问题是:
我在使用fileinfo检测简单PNG文件的mime类型时遇到问题,在CentOS服务器上安装了PHP 5.3.8.
问题
基本上,如果我有以下代码:
<?php
$const = defined('FILEINFO_MIME_TYPE') ? FILEINFO_MIME_TYPE : FILEINFO_MIME;
$handle = finfo_open($const, '/usr/share/file/magic.mime');
$result = finfo_file($handle, '/var/vhosts/v4dev/public/Melvin.png');
echo $result;
unset($handle);
?>
Run Code Online (Sandbox Code Playgroud)
如您所见,该文件是PNG图像.已检查文件的头字节并且是正确的.但是此页面输出的结果不正确:
application/octet-stream
Run Code Online (Sandbox Code Playgroud)
我想这是因为无法检测到文件类型,fileinfo返回了默认响应,但我发现无法检查.
我尝试了什么
要检查magic.mime文件的正确性,我使用了文件控制台命令:
file -m /usr/share/file/magic.mime /var/vhosts/v4dev/public/Melvin.png
Run Code Online (Sandbox Code Playgroud)
哪个返回了预期的结果:
/var/vhosts/v4dev/public/Melvin.png: image/png
Run Code Online (Sandbox Code Playgroud)
我还尝试了Apache提供的另一个magic.mime文件,但问题仍然存在.
我尝试通过默认的fileinfo位置(使用符号链接和文件的副本),MAGIC环境变量以及通过指定finfo_open调用中的文件路径(如上所述)来指定magic.mime文件.
我试过更新PHP.
......现在我没有选择了.
如果有人能帮助我,我会在太空中发出幸福的浪潮,这样他/她就可以幸福地生活.
干杯