簡體   English   中英

Mime Type和文件擴展名之間有什么關系

[英]What is the relation between Mime Type and file extension

我的問題是:文件擴展名和它的mime類型之間有關系嗎? 我的意思是,如果我得到一個文件,例如.php並將其擴展名更改為.png也會更改它的mime類型?

簡短的回答:是的。

答案略長:Mime類型和文件擴展名提供了有關如何處理文件的提示。 文件擴展名通常用於您的OS來決定使用哪個程序打開文件,而Mime類型卻被您的瀏覽器用來決定如何顯示某些數據(或服務器如何解釋接收到的數據)。 兩者都是可選的,但達成協議是一種好的做法。 更改文件作為文件的mime類型取決於您的Web服務器。 我相信Apache可以在某些地方設置從擴展名到mime類型的映射。 如果您有自己的后端服務內容,則可以使用任意任意的MIME類型來提供內容,例如在PHP中:

<?php
// We'll be outputting a PDF
header('Content-Type: application/pdf');
...

要么

<?php
header('Content-Type: application/javascript');
echo "//script code here"

文件擴展名是關於文件包含的數據類型的提示。 MIME類型是文件中數據類型的標簽。 一個文件擴展名最多映射到一種MIME類型。 一種MIME類型映射到零個或多個文件擴展名。 一個很好的例子是image/jpeg ,它同時映射到.jpg.jpeg

除了理論之外,瀏覽器為您提供的MIME類型通常是可靠的,但是如果您需要確定性 ,則必須假定瀏覽器已受到破壞。

在這種情況下,在使用PHP的服務器上,您可以檢查給定的文件是否與給定的MIME類型匹配並具有FInfo擴展名:

$path = '/path/to/your/file.pdf';
$info = finfo_open(FILEINFO_MIME_TYPE);
switch (finfo_file($info, $fpath)) {
case 'application/pdf':
    // hooray, this is what you want
    // do whatever
    break;

default:
    throw new RuntimeException('I said give me a PDF!');
}

或者,如果您想要一個簡單的功能:

function is_mime_type($path, $mime) {
    return (finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path) === $mime);
}

if (is_mime_type('/path/to/file.pdf', 'application/pdf')) {
    // hooray
}

這是一個類似的答案 ,記錄了實現此目標的其他方法。

這是一個詢問文件擴展名和MIME類型之間的映射的答案

暫無
暫無

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

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