【问题标题】:Perl Upload Code Leaves Blank Upload FilePerl 上传代码留下空白的上传文件
【发布时间】: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


【解决方案1】:

如果您在 Google perl cgi file upload 上进行搜索,第一个 链接是一个向您展示确切如何做到这一点的教程:http://www.sitepoint.com/uploading-files-cgi-perl/

  • 您在表单上使用get 而不是post
  • 您没有从 CGI 对象中读取文件,该对象通过 $cgi-&gt;upload('pic') 访问

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-27
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多