動態根據檔案類型傳回匹配的contentType

  • 1274
  • 0

動態根據檔案類型傳回匹配的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 等等。