Image::Info を使って FormValidator::Lite::Constraint::File よりもう少し厳し目にチェックする
さん
package MyApp::FormValidator::Constraint::ImageType; use strict; use warnings; use FormValidator::Lite::Constraint; use Image::Info (); use Carp (); file_rule 'IMAGE_TYPE' => sub { Carp::croak('missing args. usage: ["IMAGE_TYPE", "(GIF|PNG|JPEG)"]') unless @_; my $expected = $_[0]; my $type = Image::Info::image_type($_->{upload}->path); if ( exists $type->{error} ) { warn "image_type error: " . $type->{error}; return undef; } return $type->{file_type} =~ /^$expected/; }; 1;
use FormValidator::Lite qw(+MyApp::FormValidator::Constraint::ImageType); my $v = FormValidator::Lite->new($q); $v->check( photo => [ ['IMAGE_TYPE', 'JPEG'] ] );
みたいな感じで使う
$_->{upload}->path は plack::request::upload だけでしか動かないと思います。