#!/usr/bin/perl use strict; use Image::Size; use CGI; my $query = new CGI; my %upload_fields = ( AUT_File => { width => 640, height => 480, directory => 'Gallery/640x480', }, THM_File => { width => 80, height => 60, directory => 'Gallery/80x60', }, ); for (keys %upload_fields) { my $url = receive_upload( $query->upload($_), $upload_fields{$_} ) if $query->param($_); # print confirmation? } # and carry on to handle rest of form. # meanwhile: sub receive_upload { my ($filehandle, $parameters) = @_; my $width = $parameters->{width}; my $height = $parameters->{height}; my $directory = $parameters->{directory}; my ($filewidth, $fileheight, $filetype) = imgsize( $filehandle ); throw_error("that's not an image file at all") unless $filewidth; throw_error("that's not our kind of image file") unless $filetype =~ /jpeg/i || $filetype=~/png/i || $filetype=~/gif/i; throw_error("that's not the right size: we insist on $width wide by $height high")if $filewidth != $width || $fileheight != $height; open (OUTFILE,">$directory/$filehandle") || die ("couldn't save '$directory/$filehandle'; $!"); my $bytesread = 0; while ($bytesread = read($filehandle, my $buffer,1024)) { print OUTFILE $buffer } close OUTFILE || die ("couldn't close newly uploaded file '$directory/$filehandle'; $!"); return $directory/$filehandle; } sub throw_error { my $message = shift; # do something sensible with $message }