Почему мой образ, загружаемый с помощью Perl LWP, дает мне файл неправильного размера? - PullRequest
7 голосов
/ 29 мая 2009

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

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

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

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

Помощь!

Ответы [ 2 ]

14 голосов
/ 29 мая 2009

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

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

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

13 голосов
/ 29 мая 2009

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

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