Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re^4: Catalyst::Request::Upload inside-out-object weirdness

by andye (Curate)
on Mar 26, 2010 at 15:19 UTC ( #831177=note: print w/ replies, xml ) Need Help??


in reply to Re^3: Catalyst::Request::Upload inside-out-object weirdness
in thread Catalyst::Request::Upload inside-out-object weirdness

That's right, I don't.

Looking at the source, it looks like that happens in Catalyst::Engine::prepare_uploads

sub prepare_uploads { my ( $self, $c ) = @_; my $request = $c->request; return unless $request->_body; my $uploads = $request->_body->upload; my $parameters = $request->parameters; foreach my $name (keys %$uploads) { my $files = $uploads->{$name}; my @uploads; for my $upload (ref $files eq 'ARRAY' ? @$files : ($files)) { my $headers = HTTP::Headers->new( %{ $upload->{headers} } +); my $u = Catalyst::Request::Upload->new ( size => $upload->{size}, type => $headers->content_type, headers => $headers, tempname => $upload->{tempname}, filename => $upload->{filename}, ); push @uploads, $u; } $request->uploads->{$name} = @uploads > 1 ? \@uploads : $uploa +ds[0]; # support access to the filename as a normal param my @filenames = map { $_->{filename} } @uploads; # append, if there's already params with this name if (exists $parameters->{$name}) { if (ref $parameters->{$name} eq 'ARRAY') { push @{ $parameters->{$name} }, @filenames; } else { $parameters->{$name} = [ $parameters->{$name}, @filena +mes ]; } } else { $parameters->{$name} = @filenames > 1 ? \@filenames : $fil +enames[0]; } } }


Comment on Re^4: Catalyst::Request::Upload inside-out-object weirdness
Download Code
Re^5: Catalyst::Request::Upload inside-out-object weirdness
by ikegami (Pope) on Mar 26, 2010 at 15:39 UTC

    [The indexing is messed up for this thread. My earlier reply isn't showing, so I'm reposting it]

    Looks like

    $headers->content_type
    can return more than one value. Replace it with
    scalar($headers->content_type)
      you're right. amending catalyst::engine to say

      my $u = Catalyst::Request::Upload->new ( size => $upload->{size}, type => $headers->content_type, headers => $headers, tempname => $upload->{tempname}, filename => $upload->{filename}, ); use Data::Dump +er; die '$headers: +'.Dumper($headers). 'type:'.Du +mper($headers->content_type). '$u:'.Dump +er($u). "\nek!";

      gives

      [error] Caught exception in engine "$headers:$VAR1 = bless( { 'content-disposition' => 'form-data; name="SourceFile +_1"; filename="aaa.jpg"', 'content-type' => 'image/jpeg; charset=utf-8; Content +-Transfer-Encoding: binary' }, 'HTTP::Headers' ); type:$VAR1 = 'image/jpeg'; $VAR2 = 'charset=utf-8; Content-Transfer-Encoding: binary'; $u:$VAR1 = bless( { 'aaa.jpg' => undef, '/tmp/P3v6fH2JR6' => 'filename', 'HTTP::Headers=HASH(0x40e9e58)' => 'tempname', 'type' => 'image/jpeg', 'charset=utf-8; Content-Transfer-Encoding: binary' => + 'headers', 'size' => 374205 }, 'Catalyst::Request::Upload' ); ek! at /Library/Perl/5.8.6/Catalyst/Engine.pm line 556."
      so it looks like $headers->content_type is indeed returning two values. I'll suggest a patch.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://831177]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (6)
As of 2015-07-04 14:33 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls