| Catalyst-Runtime documentation | Contained in the Catalyst-Runtime distribution. |
Catalyst::Request::Upload - handles file upload requests
my $upload = $c->req->upload('field');
$upload->basename;
$upload->copy_to;
$upload->fh;
$upload->filename;
$upload->headers;
$upload->link_to;
$upload->size;
$upload->slurp;
$upload->tempname;
$upload->type;
To specify where Catalyst should put the temporary files, set the 'uploadtmp' option in the Catalyst config. If unset, Catalyst will use the system temp dir.
__PACKAGE__->config( uploadtmp => '/path/to/tmpdir' );
See also Catalyst.
This class provides accessors and methods to handle client upload requests.
Simple constructor.
Copies the temporary file using File::Copy. Returns true for success, false for failure.
$upload->copy_to('/path/to/target');
Opens a temporary file (see tempname below) and returns an IO::File handle.
Returns the client-supplied filename.
Returns an HTTP::Headers object for the request.
Creates a hard link to the temporary file. Returns true for success, false for failure.
$upload->link_to('/path/to/target');
Returns the size of the uploaded file in bytes.
Returns a scalar containing the contents of the temporary file.
Note that this method will cause the filehandle pointed to by
$upload->fh to be seeked to the start of the file,
and the file handle to be put into binary mode.
Returns basename for filename.
Returns the path to the temporary file.
Returns the client-supplied Content-Type.
Provided by Moose
Catalyst Contributors, see Catalyst.pm
This library is free software. You can redistribute it and/or modify it under the same terms as Perl itself.
| Catalyst-Runtime documentation | Contained in the Catalyst-Runtime distribution. |
package Catalyst::Request::Upload; use Moose; with 'MooseX::Emulate::Class::Accessor::Fast'; use Catalyst::Exception; use File::Copy (); use IO::File qw( SEEK_SET ); use File::Spec::Unix; has filename => (is => 'rw'); has headers => (is => 'rw'); has size => (is => 'rw'); has tempname => (is => 'rw'); has type => (is => 'rw'); has basename => (is => 'ro', lazy_build => 1); has fh => ( is => 'rw', required => 1, lazy => 1, default => sub { my $self = shift; my $fh = IO::File->new($self->tempname, IO::File::O_RDONLY); unless ( defined $fh ) { my $filename = $self->tempname; Catalyst::Exception->throw( message => qq/Can't open '$filename': '$!'/ ); } return $fh; }, ); sub _build_basename { my $self = shift; my $basename = $self->filename; $basename =~ s|\\|/|g; $basename = ( File::Spec::Unix->splitpath($basename) )[2]; $basename =~ s|[^\w\.-]+|_|g; return $basename; } no Moose;
sub copy_to { my $self = shift; return File::Copy::copy( $self->tempname, @_ ); }
sub link_to { my ( $self, $target ) = @_; return CORE::link( $self->tempname, $target ); }
sub slurp { my ( $self, $layer ) = @_; unless ($layer) { $layer = ':raw'; } my $content = undef; my $handle = $self->fh; binmode( $handle, $layer ); $handle->seek(0, SEEK_SET); while ( $handle->sysread( my $buffer, 8192 ) ) { $content .= $buffer; } $handle->seek(0, SEEK_SET); return $content; }
__PACKAGE__->meta->make_immutable; 1;