http://www.perlmonks.org?node_id=1106301


in reply to Handling multiple file upload with Mojo

Just to make this code complete with working example. Did not know this, but Mojolicious has no dependencies, and also CGI is out of Perl core.
#!/usr/bin/env perl use strict; use warnings; use Mojolicious::Lite; my $uploadFileDirectory = 'UPLOADS'; mkdir $uploadFileDirectory if ( !-d $uploadFileDirectory ); $ENV{"MOJO_MAX_MESSAGE_SIZE"} = 25 * 2**20; #25 MB get '/upload' => sub { my $c = shift; $c->render('simpleUploadForm'); }; post '/handleUpload' => sub { my $c = shift; my @fileNames; my $files = $c->req->every_upload('files'); for my $file ( @{$files} ) { my $fileName = $file->filename =~ s/[^\w\d\.]+/_/gr; $file->move_to("$uploadFileDirectory/$fileName"); $c->app->log->debug("$fileName uploaded\n"); push @fileNames, $fileName; } $c->render( 'successUpload', files => \@fileNames ); }; app->start; __DATA__ @@ simpleUploadForm.html.ep <!DOCTYPE html> <html> <form action='/handleUpload' method='post' enctype='multipart/form- +data'> Select Files: <input type='file' name='files' multiple=1><br/> <input type="submit" > </html> @@ successUpload.html.ep <!DOCTYPE html> <html> <img src='success.jpg' /> <% for my $j (@{$files}) { %> <p> <%= $j %> </p> <% } %> </html> @@ exception.development.html.ep <!DOCTYPE html> <html> Fail </html>
Update: Must use method "every_upload" introduced in Mojolicious 5.48 or you will only get one file.