業務で使うウェブアプをCatalystで作っているのですが、ファイルのアップロード処理でちょっとだけはまったのでメモ。
最初、 Catalyst::Request::Upload の説明を読んだのですが、これだけだとさっぱり使い方が分からない。で、 Catalyst::Request を併せて読むことで、ようやくわかりました。こんな感じです。
for my $upload (values $c->request->uploads){ if($upload->filename){ $upload->copy_to('/path/to/' . $upload->filename); } unlink $upload->tempname; }
注意点としては、<input type="file" /> の入力フォームが空の状態でpostしても、$c->request->uploadsは空にはならないので、 $upload->filename が空かどうかチェックすること。それと、 $upload->tempname で示されるパスにテンポラリファイルが作られる(しかもファイル入力フォームが空の状態でも)ので、ちゃんと消しておかないとうざい、といったあたりでしょうか。