Laravel 5 - 从文件扩展名获取MIME类型

时间:2015-04-08 08:37:15

标签: php laravel laravel-5 mime

在Laravel 5中如何从扩展中获取MIME类型?如果有一种方法可以将扩展数组转换为mimes数组,那就更好了。

E.g。如何将array('doc', 'xls')转换为array('application/msword', 'application/vnd.ms-excel')

8 个答案:

答案 0 :(得分:8)

当" guzzlehttp / guzzle":" ~5.3 | ~6.0"在你的composer.json中,你可以使用它:

$mimetype = \GuzzleHttp\Psr7\mimetype_from_filename('foo.doc');
$mimetype = \GuzzleHttp\Psr7\mimetype_from_extension('doc');

答案 1 :(得分:4)

获取文件模仿类型

$request->file->getMimeType()

验证码

$request->validate([
    'image' => 'required|image|mimes:jpeg,png,jpg,gif,svg'
    'mp3'=>'required|mimetypes:audio/mpeg'
   ]);

您可以从上面的代码中获取文件类型,然后将其设置为 mimetypes ,例如为mp3设置

答案 2 :(得分:2)

默认情况下,

Guzzle包含在Laravel 5中,此库中的list of mime typesfromExtension()方法可以显示所询问的内容。

因此,要获得单个扩展名的MIME类型:

$mimetypes = new \GuzzleHttp\Mimetypes;

$mime = $mimetypes->fromExtension($extension);

从扩展数组中获取MIME类型数组:

$mimetypes = new \GuzzleHttp\Mimetypes;

$mimes = [];
foreach ($extensions as $extension) {
    $mimes[] = $mimetypes->fromExtension($extension);
}

答案 3 :(得分:2)

MimeType::from('koala_transparent.png')

返回“图片/ png”

答案 4 :(得分:1)

首先,您需要下载此公共域文件:http://svn.apache.org/repos/asf/httpd/httpd/trunk/docs/conf/mime.types

然后使用以下函数读取文件并获得扩展名的相应MIME类型:

function getMIME($extension) {
    $file = "mime.types";
    $in = fopen($file, "r");
    while (($line = fgets($in)) !== false) {
        if (preg_match("/([a-z]+\/[a-z]+)\s+([a-z\s]*)\b($extension)\b/", $line, $match)) {
            return $match[1];
        }
    }
    fclose($in);
    return "error";
}

echo getMIME("doc");

输出:

  

应用程序/ msword

要转换数组:

$myArray = array('doc', 'xls');

foreach($myArray as $key => $value){
    $myArray[$key] = getMIME($value);
}

答案 5 :(得分:0)

L5中的最佳:

\File::mimeType('physical/path/to/file.ext');

答案 6 :(得分:0)

在Guzzle“^ 6.3”

new \GuzzleHttp\Mimetypes; not exists

答案 7 :(得分:0)

我用过

https://github.com/ralouphie/mimey

它可以按扩展名给出模仿类型,而没有现有文件