Skip to content

Commit

Permalink
fixed support for multiple uploads in Mojolicious::Controller
Browse files Browse the repository at this point in the history
  • Loading branch information
kraih committed Jan 9, 2013
1 parent 13c9c8b commit 07475c1
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 4 deletions.
3 changes: 3 additions & 0 deletions Changes
@@ -1,4 +1,7 @@

3.76 2013-01-09
- Fixed support for multiple uploads in Mojolicious::Controller.

3.75 2013-01-08
- Added to_route method to Mojo::Path.
- Improved router performance slightly.
Expand Down
3 changes: 1 addition & 2 deletions lib/Mojolicious/Controller.pm
Expand Up @@ -134,8 +134,7 @@ sub param {
}

# Upload
my $upload = $req->upload($name);
return $upload if $upload;
return $req->upload($name) if $req->upload($name);

# Param values
return $req->param($name);
Expand Down
30 changes: 28 additions & 2 deletions t/mojolicious/upload_lite_app.t
Expand Up @@ -8,6 +8,8 @@ BEGIN {

use Test::More;
use Mojo::Asset::File;
use Mojo::Content::MultiPart;
use Mojo::Content::Single;
use Mojolicious::Lite;
use Test::Mojo;

Expand Down Expand Up @@ -46,6 +48,16 @@ post '/multi' => sub {
. $file2->asset->slurp);
};

# POST /same_name
post '/same_name' => sub {
my $self = shift;
my @files = $self->param('file');
$self->render_text($files[0]->filename
. $files[0]->asset->slurp
. $files[1]->filename
. $files[1]->asset->slurp);
};

my $t = Test::Mojo->new;

# POST /upload (asset and filename)
Expand All @@ -69,12 +81,26 @@ $t->post_form_ok('/upload' => {file => $hash, test => 'tset'})->status_is(200)

# POST /multi_reverse
$t->post_form_ok('/multi_reverse',
{file1 => {content => '1111'}, file2 => {content => '11112222'},})
{file1 => {content => '1111'}, file2 => {content => '11112222'}})
->status_is(200)->content_is('file11111file211112222');

# POST /multi
$t->post_form_ok('/multi',
{file1 => {content => '1111'}, file2 => {content => '11112222'},})
{file1 => {content => '1111'}, file2 => {content => '11112222'}})
->status_is(200)->content_is('file11111file211112222');

# POST /same_name (multiple file uploads with same name)
my $tx = $t->ua->build_tx(POST => '/same_name');
$tx->req->content(Mojo::Content::MultiPart->new);
$tx->req->headers->content_type('multipart/form-data');
push @{$tx->req->content->parts}, Mojo::Content::Single->new;
$tx->req->content->parts->[-1]
->headers->content_disposition('form-data;name="file";filename="one.txt"');
$tx->req->content->parts->[-1]->asset->add_chunk('just');
push @{$tx->req->content->parts}, Mojo::Content::Single->new;
$tx->req->content->parts->[-1]
->headers->content_disposition('form-data;name="file";filename="two.txt"');
$tx->req->content->parts->[-1]->asset->add_chunk('works');
$t->request_ok($tx)->status_is(200)->content_is('one.txtjusttwo.txtworks');

done_testing();

0 comments on commit 07475c1

Please sign in to comment.