Почему мой образ, загруженный с Perl LWP, дает мне файл неправильного размера?

Я пытаюсь получить изображение с HTTP-сервера с помощью Perl.

У меня есть полный URL-адрес файла, и я пытаюсь использовать

my $data = LWP::Simple::get $params{URL};
my $filename = "image.jpg";
open (FH, ">$filename");
print FH $data;
close (FH);

Теперь, по логике, по крайней мере для меня, это должно работать. Но файлы немного разного размера, и я не могу понять, почему.

Помощь!


person Xetius    schedule 29.05.2009    source источник
comment
Проблема только в том, что файлы разного размера? Насколько незначительным является незначительным? Изображение, отправляемое пользователю, совпадает с изображением на вашем сервере?   -  person John Christensen    schedule 29.05.2009
comment
изображение размером 20 КБ было отключено, возможно, на 30 байт. Дэйв Хинтон решил проблему. Я не запускал в binmode.   -  person Xetius    schedule 29.05.2009


Ответы (2)


Вам нужно использовать binmode для правильной записи данных изображения на диск.

my $data = LWP::Simple::get $params{URL};
my $filename = "image.jpg";
open (FH, ">$filename");
binmode (FH);
print FH $data;
close (FH);

В противном случае он интерпретируется как текст, и символы новой строки удаляются.

person dave4420    schedule 29.05.2009
comment
Вам не нужен глобальный файловый дескриптор. Используйте файл write_file File::Slurp или LWP::Simple::getstore. - person Sinan Ünür; 29.05.2009
comment
Я нашел большую зеленую галочку рядом с binmode забавной. - person ysth; 31.05.2009

Дэйв прав, вы должны/должны установить дескриптор файла в двоичный режим. Но вы можете сделать все это за один раз:

LWP::Simple::getstore( $params{URL}, 'image.jpg' );
person innaM    schedule 29.05.2009