Код загрузки Perl оставляет пустой файл загрузки - PullRequest
0 голосов
/ 05 ноября 2011

Я искал в Интернете код, который можно использовать, чтобы позволить пользователям моего сайта загружать фотографии.Я пробовал несколько 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-> пары ( 'ПИК');только подбирает базовое имя дескриптора файла с компьютера пользователя.Например, когда я пытаюсь загрузить файл с именем «/home/nick/Pictures/photo.JPG», сообщение, которое я получаю с сервера, говорит: «photo.JPG был успешно загружен ... спасибо».Может быть, это не проблема, я не знаю ...

Я получаю тот же результат, используя Firefox и Chrome.Разрешения для папки загрузки - 777.

Я знаю, что безопасность в этом коде слабая.Я могу добраться до этого позже.сейчас я просто хочу, чтобы это сработало.

1 Ответ

2 голосов
/ 05 ноября 2011

Если вы гуглите perl cgi file upload, ссылка first на учебник, который точно , как это сделать:

  • Вы делаете get вместо post в вашей форме
  • Вы не читаете файл из объекта CGI, доступ к которому осуществляется через $cgi->upload('pic')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...