アップロードされたファイルのコンテントタイプを取得する

アップロードされたファイルのコンテントタイプを取得するには、Mojo::Uploadクラスのheadersメソッドを使用し、Mojo::Headersオブジェクトを取得し、content_typeメソッドを呼び出します。

# アップロードされたファイルのコンテントタイプを取得する
my $content_type = $upload->headers->content_type;

コンテントタイプと拡張子

一般的な画像のコンテントタイプとPDFの拡張子について記述しておきます。

PNG

# 拡張子 コンテントタイプ
png      image/png

JPEG

# 拡張子 コンテントタイプ   
jpeg     image/jpeg
jpg      image/jpeg

GIF

# 拡張子 コンテントタイプ
gif      image/gif

PDF

# 拡張子 コンテントタイプ
pdf      application/pdf

コンテントタイプから拡張子を決定する

アップロードされたファイルを保存したい場合に、コンテントタイプの種類に応じて、ファイルの拡張性を作成したいという場合があると思います。そのようなロジックのサンプルをここに記述しておきます。正規表現を使って判定しています。

my $content_type = 'image/png';
my $ext;

# PNG
if ($content_type =~ m|\bimage/png\b|) {
  $ext = 'png';
}
# JPEG
elsif ($content_type =~ m|\bimage/jpeg\b|) {
  $ext = 'jpg';
}
# GIF
elsif ($content_type =~ m|\bimage/gif\b|) {
  $ext = 'gif';
}
# PDF
elsif ($content_type =~ m|\bapplication/pdf\b|) {
  $ext = 'pdf';
}
else {
  # 予想していないコンテントタイプ
}

print "$ext\n";

関連情報