package Prancer::Request::Upload; use strict; use warnings FATAL => 'all'; sub new { my $class = shift; my %args = @_; return bless({ '_headers' => $args{'headers'}, '_tempname' => $args{'tempname'}, '_size' => $args{'size'}, '_filename' => $args{'filename'}, }, $class); } sub filename { my $self = shift; return $self->{'_filename'}; } sub headers { my $self = shift; return $self->{'_headers'}; } sub size { my $self = shift; return $self->{'_size'}; } sub tempname { my $self = shift; return $self->{'_tempname'}; } sub path { my $self = shift; return $self->{'_tempname'}; } sub content_type { my $self = shift; return $self->{'_headers'}->content_type(@_); } sub basename { my $self = shift; unless (defined($self->{'_basename'})) { require File::Spec::Unix; my $basename = $self->{'_filename'}; $basename =~ s|\\|/|gx; $basename = (File::Spec::Unix->splitpath($basename))[2]; $basename =~ s|[^\w\.-]+|_|gx; $self->{'_basename'} = $basename; } return $self->{'_basename'}; } 1; =head1 NAME Prancer::Request::Upload =head1 SYNOPSIS Uploads come from the L<Prancer::Request> object passed to your handler. They can be used like this: # in your HTML <form method="POST" enctype="multipart/form-data"> <input type="file" name="foobar" /> </form> # in the Prancer handler my $upload = context->upload('foo'); my $upload = context->request->upload('bar'); $upload->size(); $upload->path(); $upload->content_type(); $upload->filename(); $upload->basename(); =head1 ATTRIBUTES =over 4 =item size Returns the size of uploaded file. =item path Returns the path to the temporary file where uploaded file is saved. =item content_type Returns the content type of the uploaded file. =item filename Returns the original filename in the client. =item basename Returns basename for "filename". =back =cut