I am attempting to implement an upload script and having problems.  I see from 
the apache::asp documentation (http://www.apache-asp.org/cgi.html) that the 
recommendation is to roll back to CGI v2.78.  This is not an option in my case- 
I am locked into 3.43.  I am hoping that somebody can offer suggestions on 
patching either apache::asp or CGI to get my script to function.  I am adapting 
the  upload script from here, and it looks pretty straight forward:
http://www.sitepoint.com/article/uploading-files-cgi-perl/

Unfortunately, when I run the script, I end up with an empty file on my server. 
 I have edited CGI.pm to use an appropriate $CGITempFile::TMPDIRECTORY

Some other potentially relevant specs: Fedora 10, Apache/2.2.11 (Unix) 
mod_perl/2.0.4 Perl/v5.10.0

Also, as another potential clue, I found which attempting to debug that I seem 
to have an empty request object... If I try to read directly from request->Form 
I get the error:

Can't locate object method "request" via package "Apache" at 
/home/httpd/html-MBA/Users/InputForms/Me
taManager4.html line 93. <--> , 
/usr/local/lib/perl5/site_perl/5.10.0/Apache/ASP.pm line 1522

Also, when I attempt to test the upload script from 
http://www.apache-asp.org/eg/file_upload.asp on my own server, I again seem to 
be stymied by the missing request object.

Many thanks for assisting in sorting this issue out.


Andrew Koebrick

++++++++++++++
Problem script:

                        my $safe_filename_characters = "a-zA-Z0-9_.-";
                        my $upload_dir = 
"$ENV{DOCUMENT_ROOT}/$cfg->{DocumentStore}";

                        my $filename = $query->param("Identifier-upload");

                        if ( !$filename )
                        {
                         print $query->header ( );
                         print "There was a problem uploading your photo (try a 
smaller file).";
                         exit;
                        }

                        my ( $name, $path, $extension ) = fileparse ( 
$filename, '\..*' );
                        $filename = $name . $extension;
                        $filename =~ tr/ /_/;
                        $filename =~ s/[^$safe_filename_characters]//g;

                        if ( $filename =~ /^([$safe_filename_characters]+)$/ )
                        {
                         $filename = $1;
                        }
                        else
                        {
                         die "Filename contains invalid characters";
                        }




                        my $upload_filehandle = 
$query->upload("Identifier-upload");
                        print "Location $upload_dir/$filename";
                        open ( UPLOADFILE, ">/home/httpd/html-MBA/$filename" ) 
or die "$!";
                        binmode UPLOADFILE;
                        while ( <$upload_filehandle> )
                        {
                         print UPLOADFILE;
                        }

                        close UPLOADFILE;

Reply via email to