2009-05-29 10 views
7

Sto cercando di ottenere un'immagine da un server HTTP usando Perl.Perché il download dell'immagine con l'LWP di Perl mi fornisce il file di dimensioni errate?

ho l'URL completo del file e sto tentando di utilizzare

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

Ora, logicamente, almeno per me, questo dovrebbe funzionare. Ma i file hanno dimensioni leggermente diverse e non riesco a capire perché.

Help!

+0

Di che dimensioni sono? – chaos

+0

L'unico problema è che i file hanno dimensioni diverse? Quanto è leggero? L'immagine che viene inviata all'utente è uguale all'immagine sul tuo server? –

+0

un'immagine a 20k era spenta di forse 30 byte. Dave Hinton ha risolto il problema. Non stavo correndo in binmode. – Xetius

risposta

14

È necessario utilizzare binmode per scrivere correttamente i dati dell'immagine su disco.

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

In caso contrario viene interpretato come testo, e le nuove righe ottenere munged.

+0

Sapevo che doveva essere qualcosa di semplice. – Xetius

+2

Non hai bisogno di un filehandle globale che si aggiri così. Usa File :: Il file di scrittura di Slurp o LWP :: Simple :: getstore. –

+0

Ho trovato il grande segno di spunta verde accanto a binmode divertente. – ysth

13

Dave ha ragione, è necessario/deve impostare l'handle del file in modalità binaria. Ma puoi fare tutto questo in una volta sola:

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