動態根據檔案類型傳回匹配的contentType
FileExtensionContentTypeProvider 是一個 ASP.NET Core 中的類別,用來將檔案副檔名映射到對應的 MIME 類型,可以用於設定 Content-Type 的標頭。
以下是一個簡單的範例,展示如何使用 FileExtensionContentTypeProvider 類別設定 MIME 類型:
[HttpGet("{fileName}")]
public ActionResult GetFile(string fileName)
{
var filePath = "Temp/" + fileName;
var provider = new FileExtensionContentTypeProvider();
if (!provider.TryGetContentType(fileName, out var contentType))
{
contentType = "application/octet-stream";
}
var fileStream = new FileStream(filePath, FileMode.Open);
return File(fileStream, contentType, fileName);
}
在上述範例中,我們使用 FileExtensionContentTypeProvider 來獲取指定檔案的 MIME 類型。如果無法從副檔名獲取對應的 MIME 類型,則預設使用 "application/octet-stream" 作為 MIME 類型。然後,我們使用 File 方法返回檔案,這會設置 Content-Type 標頭,讓瀏覽器知道如何處理回傳的內容。
IOC寫法:
// 註冊FileExtensionContentTypeProvider
builder.Services.AddSingleton<FileExtensionContentTypeProvider>();
public class FileController : ControllerBase
{
// FileExtensions.MimeTypes IOC
private readonly FileExtensionContentTypeProvider _fileExtensionContentTypeProvider;
public FileController(FileExtensionContentTypeProvider fileExtensionContentTypeProvider)
{
_fileExtensionContentTypeProvider = fileExtensionContentTypeProvider ??
throw new System.ArgumentException(
nameof(fileExtensionContentTypeProvider));
}
[HttpGet("{fileName}")]
public ActionResult GetFile(string fileName)
{
var filePath = "Temp/" + fileName;
if (!_fileExtensionContentTypeProvider.TryGetContentType(fileName, out var contentType))
{
contentType = "application/octet-stream";
}
var fileStream = new FileStream(filePath, FileMode.Open);
return File(fileStream, contentType, fileName);
}
}
結論:根據檔案附檔名傳回對應的contentType類型(application/pdf..等),如果沒有匹配的則傳回(application/octet-stream)。
補充
MIME (Multipurpose Internet Mail Extensions) 類型是一種用於標示在互聯網上傳輸的檔案類型的標準化方法。它是一種資訊標籤,可以表示文件格式、文件編碼方式、文件所包含的資料種類等等。透過這種標籤的設置,瀏覽器、郵件客戶端等客戶端軟體可以識別檔案的內容,並選擇適當的方式處理這些檔案,例如在瀏覽器中直接顯示、下載或是用其他應用程式打開。
MIME 類型由一個字符串構成,通常是由兩部分組成:類型(type)和子類型(subtype),用一個斜杠(/)相隔,例如 text/html、image/jpeg、application/json 等。類型描述了資料的大類別,子類型描述了資料的具體類型。常見的 MIME 類型包括 text、image、audio、video、application 等等。