Perl上传代码留下空白上传文件

时间:2011-11-05 01:04:38

标签: perl file-upload

我已经在互联网上搜索了可用于允许我网站用户上传照片的代码。我尝试了许多开源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-&gt; param('pic');只是从用户的计算机中获取文件句柄的基本名称。例如,当我尝试上传名为“/home/nick/Pictures/photo.JPG”的文件时,我从服务器收到的消息显示“photo.JPG已成功上传...谢谢。”。也许这不是问题,我不知道......

我使用firefox和chrome获得相同的结果。 uploads文件夹的权限是777。

我知道这段代码的安全性很弱。我可以稍后再说。现在我只想看到它的工作。

1 个答案:

答案 0 :(得分:2)

如果你谷歌perl cgi file upload 第一个链接是指向完全如何执行此操作的教程:http://www.sitepoint.com/uploading-files-cgi-perl/

  • 您在表单上执行了get而不是post
  • 您没有从CGI对象中读取文件,该文件可通过$cgi->upload('pic')
  • 访问