【Powershell】ファイルのMIMEタイプを取得する方法

Powershell Powershell
この記事は約4分で読めます。

PowershellでファイルのMIMEタイプ(Content-Type)を取得してみました。

ファイルのMIMEタイプは以下の場面で利用する機会があるかと思います。

  • ファイルの種類を拡張子だけでなくMIMEタイプでもチェックしたい
  • Webサーバーへのアップロード処理で、受け取ったファイルのMIMEタイプを検証したい

今回は PowerShell 5.xを利用して試してみました。

広告

PowershellでファイルのMIMEタイプを取得する

.NET FrameworkSystem.Web 名前空間に含まれる MimeMapping クラスを利用して、MIMEタイプを取得できます。

以下のコマンドで取得可能です。

Add-Type -AssemblyName System.Web

$filePath = "C:\hogehoge\hogehoge.txt"
$fileName = [System.IO.Path]::GetFileName($filePath)

$mimeType = [System.Web.MimeMapping]::GetMimeMapping($fileName)

Write-Output "MIMEタイプ: $mimeType"

実行例

実行してみると以下のようにMIMEタイプ(今回は text/plain)が取得できます。

PS C:\> Add-Type -AssemblyName System.Web
PS C:\>
PS C:\> $filePath = "C:\hogehoge\hogehoge.txt"
PS C:\> $fileName = [System.IO.Path]::GetFileName($filePath)
PS C:\>
PS C:\> $mimeType = [System.Web.MimeMapping]::GetMimeMapping($fileName)
PS C:\>
PS C:\> Write-Output "MIMEタイプ: $mimeType"
MIMEタイプ: text/plain

[参考] 拡張子が不明な場合

WindowsのMIMEマッピングに登録されていない拡張子の場合「application/octet-stream」と表示されます。

MIMEタイプ: application/octet-stream

[参考] PowerShell 7.xの場合

PowerShell 7.xではSystem.Webがデフォルトでは読み込めません
代わりに、次のように独自のロジックを作成してMIMEタイプを判定可能です。

$filePath = "C:\hogehoge\hogehoge.txt"

$fileExtension = [System.IO.Path]::GetExtension($filePath)

# 判定ロジックを手動で作成
$mimeDictionary = @{
    ".txt" = "text/plain"
    ".jpg" = "image/jpeg"
    ".png" = "image/png"
    # 必要に応じて追加
}

$mimeType = $mimeDictionary[$fileExtension.ToLower()] ?? "application/octet-stream"

Write-Output "MIMEタイプ: $mimeType"

実行結果

PS C:\> $filePath = "C:\hogehoge\hogehoge.txt"
PS C:\>
PS C:\> $fileExtension = [System.IO.Path]::GetExtension($filePath)
PS C:\>
PS C:\> # 判定ロジックを手動で作成
PS C:\> $mimeDictionary = @{
>>     ".txt" = "text/plain"
>>     ".jpg" = "image/jpeg"
>>     ".png" = "image/png"
>>     # 必要に応じて追加
>> }
PS C:\>
PS C:\> $mimeType = $mimeDictionary[$fileExtension.ToLower()] ?? "application/octet-stream"
PS C:\>
PS C:\> Write-Output "MIMEタイプ: $mimeType"
MIMEタイプ: text/plain
PS C:\>
タイトルとURLをコピーしました