|   
 UID1 威望1240 点 金钱24019 金币 点卡317 点 
 | 
 [转帖]perl文件上传程序,支持多文件,2进制
| perl文件上传程序,支持多文件,2进制 一个真正支持二进制文件上传,允许多文件上传,可以对文件后缀进行限制,生成完整信息的小程序。。:)
 其实是我看了精华区的那篇文件上传文件后,感觉有点问题,所以特此更正一下,在此也感谢以前无私奉献的各位兄弟。。
 原先的上传由于没有采用binmode方法,所以如果上传图片或二进制文件都会出错,现在这个都已经解决了,而且还可以多文件同时上传。。:)另外加了注释。
 最后,我是一个PERL新手,如有不当,还望各位高手指点一二,小生不胜感激:)
 代码如下:
 default.htm:
 <html>
 <body>
 <form method="
  OST" action="psupload.pl" ENCTYPE="multipart/form-data"> File 1:
 <input type="file" name="FILE1">
 <br>
 File 2:
 <input type="file" name="FILE2">
 <br>
 <input type="submit" value="Upload!">
 </form>
 </body>
 </html>
 psupload.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/html\n\n";
 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 . " 已成功上传!<br>\n";
 }
 else{
 $message.=$file . " 文件后缀不符合要求,上传失败!<br>\n";
 }
 }
 $upfilecount++;
 }
 print $message; #最后输出上传信息
 
 | 
 
| 我是一个呼吸着现在的空气而生活在过去的人
 这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
 我已习惯了孤独,爱上孤独
 他让我看清了自我,还原了自我
 让我再静静的沉思中得到快乐和满足
 再孤独的世界里我一遍又一遍
 不厌其烦的改写着自己的过去
 延伸到现在与未来
 然而那只是泡沫般的美梦
 产生的时刻又伴随着破灭的到来
 在灰飞烟灭的瞬间我看到的是过程的美丽
 而不是结果的悲哀。。。
 
 |  |