2009-05-29 2 views
7

Perl을 사용하여 HTTP 서버에서 이미지를 가져 오려고합니다. 왜 Perl의 LWP로 이미지를 다운로드하면 잘못된 크기의 파일이 나옵니까?

나는 파일의 전체 URL이 적어도,이 일을해야 나에게 논리적으로 지금

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

를 사용하려고 시도하고있다. 그러나 파일은 약간 다른 크기이며, 나는 왜 일을 할 수 없습니다.

도움말!

+0

크기는 어느 정도입니까? – chaos

+0

파일의 크기가 다른 유일한 문제입니까? 약간은 경미한가? 사용자에게 전송되는 이미지가 서버의 이미지와 동일합니까? –

+0

20k 이미지가 30 바이트 쯤 떨어져있었습니다. Dave Hinton이 문제를 해결했습니다. binmode에서 실행되지 않았습니다. – Xetius

답변

14

디스크에 이미지 데이터를 올바르게 기록하려면 binmode을 사용해야합니다.

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

그렇지 않으면 텍스트로 해석되고 개행 문자가 munged가됩니다.

+0

나는 그것이 단순해야만한다는 것을 알았다. – Xetius

+2

그런 식으로 전역 파일 핸들을 사용할 필요가 없습니다. File :: Slurp의 write_file 또는 LWP :: Simple :: getstore를 사용하십시오. –

+0

binmode 바로 옆에 큰 녹색 체크 표시가 나타납니다. – ysth

13

데이브가 맞습니다. 파일 핸들을 바이너리 모드로 설정해야합니다. 하지만 한 번에 모든 것을 할 수 있습니다.

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