星星博客's Archiver

cnangel 发表于 2005-8-24 14:36

perl文件上传程序,支持多文件,2进制

[color=red]作者:大自然
email: [email]zhanmr@telekbird.com.cn[/email]
日期:2000-11-7 16:37:28[/color]
一个真正支持二进制文件上传,允许多文件上传,可以对文件后缀进行限制,生成完整信息的小程序。。:)
其实是我看了精华区的那篇文件上传文件后,感觉有点问题,所以特此更正一下,在此也感谢以前无私奉献的各位兄弟。。
原先的上传由于没有采用binmode方法,所以如果上传图片或二进制文件都会出错,现在这个都已经解决了,而且还可以多文件同时上传。。:)另外加了注释。
最后,我是一个PERL新手,如有不当,还望各位高手指点一二,小生不胜感激:)
代码如下:[code]
default.htm:
<html>
<body>
<form method="POST" 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>
[/code]
psupload.pl:
&#35;如果用CGI方式来行动这个文件,请把下段路径改成你的机器配置
[code]
&#35;!/usr/bin/perl
use CGI;
&#36;upfilecount = 1;
&#36;maxuploadcount = 2; &#35;限制上传文件的最大数
&#36;basedir = "c:/perltest/perlupload"; &#35;上传的文件存放地址
&#36;allowall = "no"; &#35;是否不限制文件后缀上传
@theext =(".zip",".exe",".gif"); &#35;要限制的文件后缀名
print "Content-type: text/html\n\n";
while (&#36;upfilecount <= &#36;maxuploadcount) {
    my &#36;req = new CGI;
    my &#36;file = &#36;req->param("FILE&#36;upfilecount");
    if (&#36;file ne "") {
        my &#36;fileName = &#36;file;
        &#36;fileName =~ s/^.*(\\|\/)//; &#35;用正则表达式去除无用的路径名,得到文件名
        my &#36;newmain = &#36;fileName;
        my &#36;filenotgood;
        if (&#36;allowall ne "yes") {
            &#36;extname = lc(substr(&#36;newmain,length(&#36;newmain) - 4,4)); &#35;取后缀名
            for(my &#36;i = 0; &#36;i < @theext; &#36;i++){ &#35;这段进行后缀名检测
                if (&#36;extname eq &#36;theext[&#36;i]){
                    &#36;filenotgood = "yes";
                    last;
                }
            }
        }
        if (&#36;filenotgood ne "yes") { &#35;这段开始上传
            open (OUTFILE, ">&#36;basedir/&#36;fileName");
            binmode(OUTFILE); &#35;务必全用二进制方式,这样就可以放心上传二进制文件了。而且文本文件也不会受干扰
            while (my &#36;bytesread = read(&#36;file, my &#36;buffer, 1024)) {
                print OUTFILE &#36;buffer;
            }
            close (OUTFILE);
            &#36;message.=&#36;file . " 已成功上传!<br>\n";
        }
        else{
            &#36;message.=&#36;file . " 文件后缀不符合要求,上传失败!<br>\n";
        }
    }
    &#36;upfilecount++;
}
print &#36;message; &#35;最后输出上传信息
[/code]

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2009 Comsenz Inc.