2011-11-05 47 views
0

我已經搜遍了互聯網尋找可用於允許我的網站用戶上傳照片的代碼。我已經嘗試了一些開放源碼的Perl代碼,所有結果都一樣:上傳到我的服務器的新文件是空白的!Perl上傳代碼葉空白上傳文件

下面是代碼:

首先,對於文件提出了一個網頁:

<form name="input" action="/cgi-bin/upload.pl" method="get" ENCTYPE="multipart/form-data"> 
Upload Photo:<input type="file" name="pic" /><BR> 
<input type="submit" name="Submit" value="Submit Form" /> 

的上傳代碼現在:

#!/usr/bin/perl 
use CGI; 
my $cgi = new CGI; 
my $dir = "/home/mydomain/www/wwwboard/uploads"; 
my $file = $cgi->param('pic'); 
my $filename = $file; 
$filename =~ s/^.*\\//; 
$filename =~ s/^.*\///; 
$filename =~ s/\s /_/g; 

open(LOCAL, ">", "$dir/$filename") or die $!; 
while(<$file>) { 
    binmode LOCAL; 
print LOCAL $_; 
} 
close(LOCAL); 
print "Content-type: text/html\n\n"; 
print "$file has been successfully uploaded... thank you.\n"; 

我不是一個Perl的專家,但在我看來,問題在於變量$ file = $ cgi-> param('pic');僅從用戶的計算機中獲取文件句柄的基本名稱。例如,當我嘗試上傳一個名爲「/home/nick/Pictures/photo.JPG」的文件時,我從服務器獲得的消息顯示「photo.JPG已成功上傳......謝謝。」。也許這不是問題,我不知道...

我使用Firefox和Chrome獲得相同的結果。上傳文件夾的權限爲777.

我知道這段代碼的安全性很弱。我可以稍後再談。現在我只想看看它的工作。

+0

搜索搜索搜索http://stackoverflow.com/questions/7770176/perl-script-for-file-upload – searcher

回答

2

如果谷歌perl cgi file upload第一鏈接是一個教程,顯示你究竟如何做到這一點:

  • 你在表單上做get代替post
  • 您未從CGI對象讀取文件,該文件通過$cgi->upload('pic')