use IO::File;
use File::Temp 0.14;
+use File::Spec;
=head1 NAME
sub init {
my $self = shift;
- unless ( $self->content_type =~ /boundary=\"?([^\";,]+)\"?/ ) {
+ unless ( $self->content_type =~ /boundary=\"?([^\";]+)\"?/ ) {
my $content_type = $self->content_type;
Carp::croak("Invalid boundary in content_type: '$content_type'");
}
$part->{filename} = $filename;
if ( $filename ne "" ) {
- my $fh = File::Temp->new( UNLINK => 0 );
+ my $basename = (File::Spec->splitpath($filename))[2];
+ my $suffix = $basename =~ /[^.]+(\.[^\\\/]+)$/ ? $1 : q{};
+
+ my $fh = File::Temp->new( UNLINK => 0, DIR => $self->tmpdir, SUFFIX => $suffix );
$part->{fh} = $fh;
$part->{tempname} = $fh->filename;
- }
+ }
}
}
if ( $part->{done} ) {
if ( exists $part->{filename} ) {
- if ( $part->{filename} ne "" ) {
- $part->{fh}->close;
+ if ( $part->{filename} ne "" ) {
+ $part->{fh}->close if defined $part->{fh};
delete @{$part}{qw[ data done fh ]};