【发布时间】:2011-11-05 09:14:02
【问题描述】:
我在互联网上搜索了可用于允许我的网站用户上传照片的代码。我尝试了许多开源 Perl 代码,结果都一样:上传到我服务器的新文件是空白的!
代码如下:
首先,一个要求文件的网页:
<form name="input" action="/cgi-bin/upload.pl" method="get" ENCTYPE="multipart/form-data">
Upload Photo:<input type="file" name="pic" /><BR>
<input type="submit" name="Submit" value="Submit Form" />
现在上传代码:
#!/usr/bin/perl
use CGI;
my $cgi = new CGI;
my $dir = "/home/mydomain/www/wwwboard/uploads";
my $file = $cgi->param('pic');
my $filename = $file;
$filename =~ s/^.*\\//;
$filename =~ s/^.*\///;
$filename =~ s/\s /_/g;
open(LOCAL, ">", "$dir/$filename") or die $!;
while(<$file>) {
binmode LOCAL;
print LOCAL $_;
}
close(LOCAL);
print "Content-type: text/html\n\n";
print "$file has been successfully uploaded... thank you.\n";
我不是 Perl 专家,但在我看来问题在于变量 $file = $cgi->param('pic');只是从用户的计算机中获取文件句柄的基本名称。例如,当我尝试上传一个名为“/home/nick/Pictures/photo.JPG”的文件时,我从服务器收到的消息说“photo.JPG 已成功上传...谢谢。”。也许这不是问题,我不知道......
我使用 firefox 和 chrome 得到了相同的结果。上传文件夹的权限是777。
我知道这段代码的安全性很弱。我可以稍后再谈。现在我只想看看它的工作原理。
【问题讨论】:
标签: perl file-upload