簡體   English   中英

Laravel 5 - 從文件擴展名中獲取 MIME 類型

[英]Laravel 5 - get MIME type from file extension

在 Laravel 5 中,如何從擴展中獲取 MIME 類型? 如果有辦法將擴展數組轉換為啞劇數組,那就更好了。

例如,如何將array('doc', 'xls')轉換為array('application/msword', 'application/vnd.ms-excel')

當 "guzzlehttp/guzzle": "~5.3|~6.0" 在你的 composer.json 中時,你可以使用這個:

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

簡直是 L5 中最好的:

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

獲取文件 mimetype

$request->file->getMimeType()

驗證碼

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

您可以從上面的代碼中獲取文件類型,之后您可以將其設置為像 set for mp3 這樣的mimetypes

Guzzle默認包含在 Laravel 5 中,這個庫 中有 mime 類型列表fromExtension()方法,它們完全符合要求。

因此,要獲得單個擴展的 MIME 類型:

$mimetypes = new \GuzzleHttp\Mimetypes;

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

要從擴展數組中獲取 MIME 類型數組:

$mimetypes = new \GuzzleHttp\Mimetypes;

$mimes = [];
foreach ($extensions as $extension) {
    $mimes[] = $mimetypes->fromExtension($extension);
}
MimeType::from('koala_transparent.png')

返回“圖像/png”

首先,您需要下載這個公共域文件: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);
}

我用了

https://github.com/ralouphie/mimey

它可以在沒有現有文件的情況下通過擴展名給出 mimetype

由於 PSR7 API 的 2.0 版mimetype_from_filenameMimeType::fromFilename取代。

這在 Laravel 8.x 中對我有用

$mimeType = \GuzzleHttp\Psr7\MimeType::fromFilename($filename);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM