Page 1 of 1

Uploading files using cgi

PostPosted: 17. August 2010 07:30
by fdice
Hi

I am trying to use cgi to allow users to upload files but every time i click "submit" button to upload a file it just shows the text version of cgi file

CGI SCRIPT:
Code: Select all
#!C:/xampp/perl/bin/perl -w
 
use strict; 
use CGI; 
use CGI::Carp qw ( fatalsToBrowser ); 
use File::Basename; 
 
$CGI::POST_MAX = 1024 * 5000; 
my $safe_filename_characters = "a-zA-Z0-9_.-"; 
my $upload_dir = "C:/xampp/htdocs/upload"; 
 
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 <<END_HTML; 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
 <head> 
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
   <title>Thanks!</title> 
   <style type="text/css"> 
     img {border: none;} 
   </style> 
 </head> 
 <body> 
   <p>Thanks for uploading your photo!</p> 
   <p>Your email address: $email_address</p> 
   <p>Your photo:</p> 
   <p><img src="/upload/$filename" alt="Photo" /></p> 
 </body> 
</html> 
END_HTML



HTML code
Code: Select all
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <title>File Upload</title>
 </head>
 <body>
   <form action="C:/xampp/cgi-bin/upload.cgi" method="post"   
enctype="multipart/form-data">
     <p>Photo to Upload: <input type="file" name="photo" /></p>
     <p>Your Email Address: <input type="text" name="email_address" /></p>
     <p><input type="submit" name="Submit" value="Submit Form" /></p>
   </form>
 </body>
</html>




also when i try uploading through http://localhost/ and click on submit button, nothin happens

Re: Uploading files using cgi

PostPosted: 17. August 2010 10:43
by Nobbie
><form action="C:/xampp/cgi-bin/upload.cgi" method="post"

That is pure nonsense. The action clause must point to an URL, not to a Path. The right value should be:

Code: Select all
<form action="http://localhost/cgi-bin/upload.cgi" method="post"   



You also MUST open the HTML Form in a browser via localhost (i.e. http://localhost/formular.html or similar), not by double clicking in explorer or similar.