perl檔案上傳程式,支援多檔案! (轉)

worldblog發表於2007-12-11
perl檔案上傳程式,支援多檔案! (轉)[@more@]一個真正支援二進位制,允許多檔案上傳,可以對檔案字尾進行限制,生成完整資訊的小。。:)



其實是我看了精華區的那篇檔案上傳檔案後,感覺有點問題,所以特此更正一下,在此也感謝以前無私奉獻的各位兄弟。。

原先的上傳由於沒有采用binmode方法,所以如果上傳圖片或二進位制檔案都會出錯,現在這個都已經解決了,而且還可以多檔案同時上傳。。:)另外加了註釋。

最後,我是一個新手,如有不當,還望各位高手指點一二,小生不勝感激:)



程式碼如下:

default.htm:







File 1:






File 2:

















ps.pl:

#如果用CGI方式來行動這個檔案,請把下段路徑改成你的機器

#!f:/activeperl/bin/perl



use CGI;

$upfilecount = 1;

$maxuploadcount = 2; #限制上傳檔案的最大數

$basedir = "c:/perltest/perlupload"; #上傳的檔案存放地址

$allowall = "no"; #是否不限制檔案字尾上傳

@theext =(".zip",".exe",".gif"); #要限制的檔案字尾名



print "Content-type: text/htmlnn";



while ($upfilecount <= $maxuploadcount) {

my $req = new CGI;

my $file = $req->param("FILE$upfilecount");

if ($file ne "") {

my $fileName = $file;

$fileName =~ s/^.*(|/)//; #用正則去除無用的路徑名,得到檔名

my $newmain = $fileName;

my $filenotgood;

if ($allowall ne "yes") {

$extname = lc(substr($newmain,length($newmain) - 4,4)); #取字尾名

for(my $i = 0; $i < @theext; $i++){ #這段進行字尾名檢測

if ($extname eq $theext[$i]){

$filenotgood = "yes";

last;

}

}

}

if ($filenotgood ne "yes") { #這段開始上傳

open (OUTFILE, ">$basedir/$fileName");

binmode(OUTFILE); #務必全用二進位制方式,這樣就可以放心上傳二進位制檔案了。而且文字檔案也不會受干擾

while (my $bytesread = read($file, my $buffer, 1024)) {

print OUTFILE $buffer;

}

close (OUTFILE);

$message.=$file . " 已成功上傳!
n";

}

else{

$message.=$file . " 檔案字尾不符合要求,上傳失敗!
n";

}

}

$upfilecount++;

}



print $message; #最後輸出上傳資訊

< script language="script">ShowReply('','donald','2001.03.19 15:39');

我已經照這個方法做了,也顯示成功上傳,但為什麼我找不到傳上取得檔案,請大哥大姐們幫幫我。

< script language="">ShowReply('','pan','2001.04.27 11:07');

有一行錯了

if ($filenotgood ne "yes") { #這段開始上傳

這行“ne”應該是“eq”,否則,符合檔案字尾的檔案會報上傳失敗,

不符合的反而能成功。

回應人:kyo 回應時間:2001.06.13 12:30:35

I can not find the uploaded file also


CGI模組早就提供了上傳的辦法。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991360/,如需轉載,請註明出處,否則將追究法律責任。

相關文章