使用Perl CGI上传文件
问题描述:
我能够创建我的目录,但我似乎无法将文件放在目录中。使用Perl CGI上传文件
#!/usr/bin/perl
use Cwd;
use CGI;
my $dir = getcwd();
print "Current Working Directory: $ dir\n";
my $photoDir = "$dir/MyPhotos";
mkdir $photoDir
or die "Cannot mkdir $photoDir: $!"
unless -d $photoDir;
my $query = new CGI;
my $filename = $query->param("Photo");
my $description = $query->param("description");
print "Current filename: $filename\n";
my ($name, $path, $extension) = fileparse ($filename, '\..*'); $filename = $name . $extension;
print $filename;
my $upload_filehandle = $query->upload("Photo");
open (UPLOADFILE, ">$photoDir/$filename")
or die "$!";
binmode UPLOADFILE;
while (<$upload_filehandle>)
{ print UPLOADFILE; }
close UPLOADFILE;
的CGI堆栈跟踪显示没有错误,但记录显示没有输出
LOG: 5 5020-0:0:0:0:0:0:0:1%0-9: CGI output 0 bytes.
答
CGI.pm使用手册暗示此路径保存上传的文件。试试这个额外的检查和写入方法,看看它是否有帮助。
$lightweight_fh = $q->upload('field_name');
# undef may be returned if it's not a valid file handle
if (defined $lightweight_fh) {
# Upgrade the handle to one compatible with IO::Handle:
my $io_handle = $lightweight_fh->handle;
open (OUTFILE,'>>','/usr/local/web/users/feedback');
while ($bytesread = $io_handle->read($buffer,1024)) {
print OUTFILE $buffer;
}
}
另外,还要确保你有你的HTML表单已要求类型是这样的:<form action=... method=post enctype="multipart/form-data">
您可以包含数据::自卸车和转储到控制台是什么$ upload_filehandle,并张贴到你的问题? (你想要打开原始的“>”追加模式。) – dwerner 2012-03-19 01:05:28
恐怕我不知道如何执行'Data:Dumper',我将它作为localhost perl cgi运行,唯一我能看到的是日志文件有没有办法打印$ upload_filehandle – Warz 2012-03-19 02:28:18
http://search.cpan.org/~smueller/Data-Dumper-2.131/Dumper.pm - 它包含在新版本的perl中,它可以创造奇迹用于调试,因为它可以用来将复杂的数据结构打印到STOUT中 – dwerner 2012-03-19 02:33:01