Загрузить файл с помощью Perl CGI

1

Я могу создать свой каталог, но я не могу поместить файл в каталог.

   #!/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
    Можете ли вы включить Data :: Dumper и вывести в консоль, что такое $ upload_filehandle, и опубликовать это на свой вопрос? (Вам также нужен оригинальный режим добавления «>» для открытия.)
  • 0
    Боюсь, я не понимаю, как выполнить этот «Data: Dumper», я запускаю его как localhost perl cgi, и единственное, что я могу видеть, это файл журнала. Есть ли способ напечатать $ upload_filehandle
Показать ещё 1 комментарий
Теги:
cgi

1 ответ

0
Лучший ответ

Руководство CGI.pm предлагает этот путь для сохранения загруженных файлов. Попробуйте этот дополнительный метод проверки и записи и посмотрите, помогает ли это.

     $lightweight_fh  = $q->upload('field_name');

     # undef may be returned if it 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
  • 0
    Это временная переменная для хранения данных. Вы можете определить ее непосредственно перед циклом while как 'my $ buffer;'
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню