Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

perl cgi scipt to upload files

by Anonymous Monk
on Jan 28, 2013 at 11:15 UTC ( #1015685=perlquestion: print w/ replies, xml ) Need Help??
Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

for small files this scipt is working fine, but for larger files , its showing as success but the result is a file of 0 bytes.please help to solve this .

#!/usr/bin/perl -wT + + + + use strict; + + use CGI; + + use CGI::Carp qw ( fatalsToBrowser ); + + use File::Basename; + + + + $CGI::POST_MAX = 1024 * 70000; + + my $safe_filename_characters = "a-zA-Z0-9_.-"; + + my $upload_dir = "/var/www/mnt"; + + + + my $query = new CGI; + + my $filename = $query->param("photo"); + + my $email_address = $query->param("email_address"); + + + + 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("photo"); + + + + open ( UPLOADFILE, ">$upload_dir/$filename" ) or die "$!"; + + binmode UPLOADFILE; + + + + while ( <$upload_filehandle> ) + + { + + print UPLOADFILE; + + } + + + + close UPLOADFILE; print $query->header ( ); + + print "<html>"; + + print "<head>"; + + + + print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset +=utf-8\" />"; + print "<title>Thanks!</title>"; + + print "<style type=\"text/css\">"; + + print 'img {border: none;}'; + + print "</style>"; + + + + print "<body> + + <p>Thanks for uploading your photo!</p> + + <p>Your email address: $email_address</p> + + <p>Your photo:</p> + + <p><img src=\"../mnt/$filename\" alt=\"Photo\" /></p> + + </body> + + </head> + + + + </html>";

Comment on perl cgi scipt to upload files
Download Code
Re: perl cgi scipt to upload files
by Corion (Pope) on Jan 28, 2013 at 11:46 UTC
    $CGI::POST_MAX = 1024 * 70000;

    What does the CGI documentation say about this line and what steps have you undertaken to verify that? Could the documentation be made clearer? Are you certain that you get "success" as answer?

Re: perl cgi scipt to upload files
by vinoth.ree (Parson) on Jan 28, 2013 at 12:02 UTC

    From CGI.pm An attempt to send a POST larger than $POST_MAX bytes will cause param() to return an empty CGI parameter list. You can test for this event by checking cgi_error(), either after you create the CGI object or, if you are using the function-oriented interface, call <param()> for the first time. If the POST was intercepted, then cgi_error() will return the message "413 POST too large".

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://1015685]
Approved by vinoth.ree
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (7)
As of 2014-10-21 04:24 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (95 votes), past polls