2012-03-18 129 views
1

我能夠創建我的目錄,但我似乎無法將文件放在目錄中。使用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

回答

0

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