From: Christian Hansen Date: Mon, 11 Apr 2005 07:30:26 +0000 (+0000) Subject: added a copy method to C::R::Upload and updated Cookbook X-Git-Tag: 5.7099_04~1554 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=catagits%2FCatalyst-Runtime.git;a=commitdiff_plain;h=47ae6960753acadac1da528c87c5d5009b675281 added a copy method to C::R::Upload and updated Cookbook --- diff --git a/lib/Catalyst/Manual/Cookbook.pod b/lib/Catalyst/Manual/Cookbook.pod index 7f4a2db..aa38da5 100644 --- a/lib/Catalyst/Manual/Cookbook.pod +++ b/lib/Catalyst/Manual/Cookbook.pod @@ -91,18 +91,13 @@ Catalyst Controller module 'upload' action: if ( $c->request->parameters->{form_submit} eq 'yes' ) { if ( my $upload = $c->request->upload('my_file') ) { - + my $filename = $upload->filename; - my $fh = $upload->fh; - - open( NEW_FILE, ">/tmp/upload/$filename" ) - or die( "Can't open file for writing: $!" ); - - while ( $fh->read( my $buf, 32768 ) ) { - print NEW_FILE $buf; + my $target = "/tmp/upload/$filename"; + + unless ( $upload->link($target) || $upload->copy($target) ) { + die( "Failed to copy '$filename' to '$target': $!" ); } - - close(NEW_FILE); } } @@ -133,18 +128,12 @@ Controller: for my $field ( $c->req->upload ) { - my $upload = $c->request->upload($field); my $filename = $upload->filename; - my $fh = $upload->fh; - - open( NEW_FILE, ">/tmp/upload/$filename" ) - or die ("Can't open file for writing: $!"); - - while ( $fh->read( my $buf, 32768 ) ) { - print NEW_FILE $buf; + my $target = "/tmp/upload/$filename"; + + unless ( $upload->link($target) || $upload->copy($target) ) { + die( "Failed to copy '$filename' to '$target': $!" ); } - - close(NEW_FILE); } } diff --git a/lib/Catalyst/Request/Upload.pm b/lib/Catalyst/Request/Upload.pm index ee1e5e2..389f810 100644 --- a/lib/Catalyst/Request/Upload.pm +++ b/lib/Catalyst/Request/Upload.pm @@ -3,7 +3,8 @@ package Catalyst::Request::Upload; use strict; use base 'Class::Accessor::Fast'; -use IO::File; +use File::Copy (); +use IO::File (); __PACKAGE__->mk_accessors(qw/filename size tempname type/); @@ -15,6 +16,7 @@ Catalyst::Request::Upload - Catalyst Request Upload Class =head1 SYNOPSIS + $upload->copy $upload->fh $upload->filename; $upload->link; @@ -26,13 +28,24 @@ See also L. =head1 DESCRIPTION -This is the Catalyst Request Upload class, which provides a set of accessors to the -upload data. +This is the Catalyst Request Upload class, which provides a set of accessors +to the upload data. =head1 METHODS =over 4 +=item $upload->copy( $target [, $bufferlen ] ) + +Copies tempname using C. Returns true for success, false otherwise. + +=cut + +sub copy { + my ( $self, $target, $buffer ) = @_; + return File::Copy::copy( $self->tempname, $target, $buffer ); +} + =item $upload->fh Opens tempname and returns a C handle. @@ -42,7 +55,7 @@ Opens tempname and returns a C handle. sub fh { my $self = shift; - my $fh = IO::File->new( $self->tempname, O_RDONLY ) + my $fh = IO::File->new( $self->tempname, IO::File::O_RDONLY ) or die( "Can't open ", $self->tempname, ": ", $! ); return $fh; @@ -62,9 +75,7 @@ success, false otherwise. =cut sub link { - my $self = shift; - my $target = shift; - + my ( $self, $target ) = @_; return CORE::link( $self->tempname, $target ); }