Validation of multiple file uploads
Let's write validation for multiple file uploads.
HTML side
This is a file upload form on the HTML side. There are four file upload fields. It corresponds to error display and deletion.
<form action = <%= url_for%> method = "POST", enctype = "multipart / form-data"> %= hidden_field op =>'update'; %= hidden_field id => $id; <ul> <li> Image 1. <%= file_field'image1'%> <div class = "error"> <%= $errors->{'image1'}? $errors->{'image1'}:''%> </div> Delete <%= check_box'image1_delete'%> </li> <li> Image 2. <%= file_field'image2'%> <div class = "error"> <%= $errors->{'image2'}? $errors->{'image2'}:''%> </div> Delete <%= check_box'image2_delete'%> </li> <li> Image 3. <%= file_field'image3'%> <div class = "error"> <%= $errors->{'image3'}? $errors->{'image3'}:''%> </div> Delete <%= check_box'image3_delete'%> </li> <li> Image 4. <%= file_field'image4'%> <div class = "error"> <%= $errors->{'image4'}? $errors->{'image4'}:''%> </div> Delete <%= check_box'image4_delete'%> </li> </ul> </form>
Program side
This is a sample code on the program side. What you get with the parameters will be a Mojo::Upload object. The image information is created by taking the values of multiple file fields and used as array reference.
If there is a file size, the file type is determined.
<% my $op = param ('op') //''; my $id = param ('id'); my $errors = {}; if ($self->req->methodeq'POST') { if ($op eq'update') { #Get parameters my $images = []; my $image_count = 4; for (my $number = 1; $number <= $image_count; $number ++) { my $image_upload = param ("image $number"); my $image = { upload => $image_upload, number => $number, };; push @$images, $image; } #Validation for my $image (@$images) { my $image_upload = $image->{upload}; if ($image_upload->size> 0) { #Content type my $image_content_type = $image_upload->headers->content_type; # extension my $ext; #PNG if ($image_content_type = ~ m | \ bimage / png \ b |) { $ext ='png'; } #JPEG elsif ($image_content_type = ~ m | \ bimage / jpeg \ b |) { $ext ='jpg'; } #GIF elsif ($image_content_type = ~ m | \ bimage / gif \ b |) { $ext ='gif'; } #PDF elsif ($image_content_type = ~ m | \ bapplication / pdf \ b |) { $ext ='pdf'; } unless (defined $ext) { my $number = $image->{number}; $errors->{"image $number"} = "The file type of image $image->{number} is invalid."; } } } } } } %>