アップロードされたファイルのサイズを取得する

アップロードされたファイルのサイズを取得してみましょう。アップロードされたファイルのサイズを取得するにはMojo::Uploadクラスのsizeメソッドを使用します。

my $size = $upload->size;

フォームからファイルをアップロードする場合は、フォームで「form」要素の「enctype」属性を「multipart/form-data」にして、ファイルフィールド(file_field)を使って、Mojo::Controllerクラスのparamメソッドを使うと、アップロードされたファイルは、Mojo::Uploadオブジェクトとして取得できます。

HTML側

<form method="POST" enctype="multipart/form-data">
  <%= file_field 'image_file' %>
</form>

プログラム側

# アップロードされたファイル
my $image_file = $c->param('image_file');

ファイルがアップロードされたかの確認

一つ注意してほしいのは、フォームからのアップロードでは、ファイルがアップロードされなかった場合も、Mojo::Uploadオブジェクトが生成されることです。そのためファイルがアップロードされたかどうかは、defined関数でチェックすることはできません。ファイルサイズをチェックする必要があります。

# 正しいアップロードのチェック
if ($image_file->size > 0) {
  
}

# 間違ったアップロードのチェック
if (defined $image_file) {
  
}

関連情報