package Plack::Request::Upload; use strict; use warnings; use Carp (); sub new { my($class, %args) = @_; bless { headers => $args{headers}, tempname => $args{tempname}, size => $args{size}, filename => $args{filename}, }, $class; } sub filename { $_[0]->{filename} } sub headers { $_[0]->{headers} } sub size { $_[0]->{size} } sub tempname { $_[0]->{tempname} } sub path { $_[0]->{tempname} } sub content_type { my $self = shift; $self->{headers}->content_type(@_); } sub type { shift->content_type(@_) } sub basename { my $self = shift; unless (defined $self->{basename}) { require File::Spec::Unix; my $basename = $self->{filename}; $basename =~ s|\\|/|g; $basename = ( File::Spec::Unix->splitpath($basename) )[2]; $basename =~ s|[^\w\.-]+|_|g; $self->{basename} = $basename; } $self->{basename}; } 1; __END__ =head1 NAME Plack::Request::Upload - handles file upload requests =head1 SYNOPSIS # $req is Plack::Request my $upload = $req->uploads->{field}; $upload->size; $upload->path; $upload->content_type; $upload->basename; =head1 METHODS =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 =head1 AUTHORS Kazuhiro Osawa Tatsuhiko Miyagawa =head1 SEE ALSO L, L =cut