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 )