Catalyst Tips #0 Catalystでファイルのアップロード

業務で使うウェブアプを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 で示されるパスにテンポラリファイルが作られる(しかもファイル入力フォームが空の状態でも)ので、ちゃんと消しておかないとうざい、といったあたりでしょうか。