使用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. 
+0

您可以包含数据::自卸车和转储到控制台是什么$ upload_filehandle,并张贴到你的问题? (你想要打开原始的“>”追加模式。) – dwerner 2012-03-19 01:05:28

+0

恐怕我不知道如何执行'Data:Dumper',我将它作为localhost perl cgi运行,唯一我能看到的是日志文件有没有办法打印$ upload_filehandle – Warz 2012-03-19 02:28:18

+0

http://search.cpan.org/~smueller/Data-Dumper-2.131/Dumper.pm - 它包含在新版本的perl中,它可以创造奇迹用于调试,因为它可以用来将复杂的数据结构打印到STOUT中 – dwerner 2012-03-19 02:33:01

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">

+0

其中是定义$ buffer – Warz 2012-03-20 16:27:16

+0

这是暂存数据的临时变量。您可以在while循环之前将其定义为'my $ buffer' – mcsi 2012-03-21 16:43:56

+0

这工作,但我没有最终使用缓冲区,问题是,我没有权限写入该目录 – Warz 2012-03-23 16:56:20