Chinaunix首页 | 论坛 | 博客
  • 博客访问: 602720
  • 博文数量: 90
  • 博客积分: 5111
  • 博客等级: 大校
  • 技术积分: 928
  • 用 户 组: 普通用户
  • 注册时间: 2007-11-29 16:56
文章存档

2011年(15)

2010年(34)

2009年(19)

2008年(22)

我的朋友

分类:

2008-10-15 19:46:31


一个真正支持二进制文件上传,允许多文件上传,可以对文件后缀进行限制,生成完整信息的小程序。。:)


其实是我看了精华区的那篇文件上传文件后,感觉有点问题,所以特此更正一下,在此也感谢以前无私奉献的各位兄弟。。
原先的上传由于没有采用binmode方法,所以如果上传图片或二进制文件都会出错,现在这个都已经解决了,而且还可以多文件同时上传。。:)另外加了注释。
最后,我是一个PERL新手,如有不当,还望各位高手指点一二,小生不胜感激:)

代码如下:
default.htm:


method="POST" action="psupload.pl" ENCTYPE="multipart/form-data">
File 1:



File 2:






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 . " 已成功上传!
\n";
}
else{
$message.=$file . " 文件后缀不符合要求,上传失败!
\n";
}
}
$upfilecount++;
}

print $message; #最后输出上传信息


阅读(1020) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~