Forum Webscript.Ru

Программирование => Perl => Тема начата: D.O. от 22 Января 2005, 21:52:49

Название: file upload и модуль CGI, проблема с upload
Отправлено: D.O. от 22 Января 2005, 21:52:49
Не могу прочитать содержимое загруженного файла.
Я делаю так:

...
use strict;
use CGI qw(:standard);
use CGI::Carp qw (fatalsToBrowser);
...
$CGI::DISABLE_UPLOADS = 0
...
my $query = new CGI;
...
my $image_file = $query->param("userpic");
...
my $test = "no";
my $new_file_name = "empty";
if($image_file) {
    no strict;
    $image_file =~ m/(\\w+\\.\\w\\w\\w)$/i;
    $new_file_name = $1;
    open UPLOADED, ">>temp\\\\$new_file_name";
    binmode UPLOADED;
    my ($bytesread, $buffer);
    while($bytesread = read($image_file, $buffer, 1024)) {
        $test = "yes";
        print UPLOADED $buffer;
    }
    close UPLOADED;
} else {
    $new_file_name = "fuck-up";
}
...

В результате файл создаётся, но он имеет нулевую длину.
Переменная $test используется просто для проверки - её значение получается "no".
Почему я не могу прочитать содержимое загруженного файла?
Название: file upload и модуль CGI, проблема с upload
Отправлено: Green Kakadu от 23 Января 2005, 01:04:52
добавь:

my $fh = $query->upload(\'userpic\');#получаем дескриптор
...
и замени:

binmode(UPLOADED);
binmode($fh);
while($bytesread = read($fh, $buffer, 1024)) {
..
}

а эта штука, которую ты использовал:
my $image_file = $query->param("userpic");
это лишь имя файла, т.е. и используй ее по назначению
..
 
Цитировать
D.O.:
open UPLOADED, ">>temp\\\\$new_file_name";

а зачем ты дописываешь \'>>\', а не пишешь новый файл? Понятно, что если такого нет, то открывается новый, но ведь есть вероятность, что такое имя будет.