1 package HTTP::Body::Multipart;
4 use base 'HTTP::Body::Multipart::Parser';
11 my $self = $class->SUPER::new(@_);
19 my ( $self, $part ) = @_;
21 if ( $part->{done} && $part->{size} == 0 ) {
25 unless ( $self->{seen}->{"$part"}++ ) {
27 my $disposition = $part->{headers}->{'Content-Disposition'};
28 my ($name) = $disposition =~ / name="?([^\";]+)"?"/;
29 my ($filename) = $disposition =~ / filename="?([^\"]+)"?/;
31 $part->{name} = $name;
32 $part->{filename} = $filename;
36 my $fh = File::Temp->new( UNLINK => 0 );
39 $part->{tempname} = $fh->filename;
43 if ( $part->{filename} ) {
44 $part->{fh}->write( delete $part->{data} );
47 if ( $part->{done} ) {
49 if ( $part->{filename} ) {
50 $self->upload( $part->{name}, $part );
54 $self->param( $part->{name}, $part->{data} );
64 my ( $name, $value ) = @_;
66 if ( exists $self->{param}->{$name} ) {
67 for ( $self->{param}->{$name} ) {
68 $_ = [$_] unless ref($_) eq "ARRAY";
73 $self->{param}->{$name} = $value;
77 return $self->{param};
85 my ( $name, $upload ) = @_;
87 if ( exists $self->{upload}->{$name} ) {
88 for ( $self->{upload}->{$name} ) {
89 $_ = [$_] unless ref($_) eq "ARRAY";
94 $self->{upload}->{$name} = $upload;
98 return $self->{upload};