CGI-UploadEngine

 view release on metacpan or  search on metacpan

Controller/Upload.pm  view on Meta::CPAN

package MBC::Controller::Upload;

use strict;
use warnings;
use Catalyst 'Session';
use base 'Catalyst::Controller';
use CGI::UploadEngine;
use Moose;
use namespace::autoclean;

# Sets the actions in this controller to be registered with no prefix
__PACKAGE__->config->{namespace} = '';

=head1 NAME

MBC::Controller::Upload - Upload Controller for MBC

=head1 DESCRIPTION

[enter your description here]

=head1 METHODS

=cut

sub upload : Local {
        my ($self, $c) = @_;

	my $token  = $c->request->param('token');
	my $upload = CGI::UploadEngine->new();
	my $file_obj;
	eval {
		# Validate upload attempt
		$file_obj  = $upload->upload_validate({ token => $token });
	
		# Upload file to server
		my ( $file_name, $target, $file_size, $success, @file_parts, $file_path_name ); 
		if ( my $file = $c->request->upload('auto_file') ) {
			# Clean client path from file name
			$file_path_name = $file->filename;
			if    ( $file_path_name =~ m%\\% ) { 
				@file_parts = split( /\\/, $file_path_name ); 
				$file_name = pop( @file_parts ); 
			} elsif ( $file_path_name =~ m%/% ) { 
				@file_parts = split( /\//, $file_path_name ); 
				$file_name = pop( @file_parts ); 
			}

			# Build server path name
			if ( $upload->verbose() ) { warn "TARGET: " . $file_obj->{file_path} . " + " . $file_name; }
			$target   = $file_obj->{file_path} . $file_name;

			# Save the file
			if ( not $file->link_to($target) and not $file->copy_to($target) ) {
				 die("ERROR: Failed to copy '$file_name' to '$target': $!");
			}

			# Check file size limits
			$file_size = $file->size; 
			my $min_size = $file_obj->{min_size};
			my $max_size = $file_obj->{max_size};
			if ( $upload->verbose() ) { warn "SIZE: ( $file_size , $max_size, $min_size )"; }
			if ( $file_size < $min_size ) {
				die("ERROR: file size $file_size is smaller than min size $min_size");
			}
			if ( $file_size > $max_size){
				die("ERROR: file size $file_size is larger than max size $max_size");
			}



( run in 0.668 second using v1.01-cache-2.11-cpan-39bf76dae61 )