科技讯息网 – 程序员的那点事!

首页 > 编程资料 > Perl语言 > 正文

怎么使用CGI模块?(2)<转自雷傲论坛>

浏览次数:次 2001年11月16日 作者:pike 字号:

怎么使用CGI模块?(2)
?四,实现文件上传功能?

在PHP中要实现基于WEB的文件上传是非常容易的,但是PERL却没有那么简单,需要获取表单中要上传的文件,然后采用read函数读取,然后写入服务器上的文件。对一些初学者来说,这样的代码具有一定的难度。但是使用CGI模块的话,一切将迎刃而解。下面我们还是通过演示的方式介绍给大家:?

#==========[HTML]==========#?
;?
;?
;?

我们在上面的HTML页面中设置了一个叫FILE_NAME的文件域,通过这个域可以选择本地机器上的任何文件,下面是一段完整的实现文件上传的PERL代码:?

#==========[PERL]==========#?
#!/usr/bin/perl?

############################?
#?代码:文件上传?
#?作者:王骜骋?
############################?

use?CGI?qw/:standard/;?#?使用CGI模块?

my?$cgi?=?new?CGI;?#?建立一个新的对象?

my?$filename?=?$cgi->;param('FILE_NAME');?#?获取表单中的FILE_NAME域?

print?$cgi->;header("text/html;?charset=gb2312");?#?输出HTML头,编码为简体中文?

&error("请选择一个文件!")?if?($filename?eq?"");?#?如果没有选择文件就提交返回错误信息?

my?$type?=?$cgi->;uploadInfo($filename)->;{'Content-Type'};?#?获取上传文件的类型?

my?$want?=?"image/pjpeg";?#?你需要用户上传的文件类型,我们这里只能让用户上传JPEG图片?

&error("系统只允许你上传JPEG图片")?if?($type?ne?$want);?#?如果文件类型不符合返回错误?

open?(OUTFILE,">;>;./YOUR_FILE_NAME.jpg");?#?写入到服务器的本地文件?

binmode(OUTFILE);?#?文件句柄设置为二进制模式?

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

print?OUTFILE?$buffer;?

}?

close(OUTFILE);?#?关闭文件?

print?"文件上传成功!";?

sub?error?{?

print?$_[0];?
exit;?

}?