ChinaUnix.net
 >> ChinaUnix.net > Perl

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

作者:pike     发表时间:2001/11/16 06:28pm

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

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

#==========[HTML]==========#
<form method="post" action="file.pl" enctype="multipart/form-data">
<input type="file" name="FILE_NAME">
</form>

我们在上面的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;

}



此文章相关评论:
该文章还没有相关评论!(点这儿可以发表评论)
 

Copyright © ChinaUnix.net  *  转载请注明出处及作者