2009-05-29 5 views
7

मैं पर्ल का उपयोग कर एक HTTP सर्वर से एक छवि प्राप्त करने की कोशिश कर रहा हूँ।पर्ल के एलडब्लूपी के साथ मेरी छवि डाउनलोड क्यों करती है मुझे गलत आकार की फ़ाइल देती है?

मैं फ़ाइल के पूर्ण 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 बाइट्स से बंद थी। डेव हिनटन ने समस्या हल की। मैं बिनमोड में नहीं चल रहा था। – 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

आपको इस तरह के आसपास लटकने वाले वैश्विक फ़ाइल की आवश्यकता नहीं है। फ़ाइल का उपयोग करें :: Slurp's write_file या LWP :: Simple :: getstore। –

+0

मुझे बिनमोड मनोरंजक के बगल में बड़ा हरा चेकमार्क मिला। – ysth

13

डेव सही है, आपको बाइनरी मोड में अपनी फ़ाइल हैंडल सेट/सेट करनी चाहिए। लेकिन आप यह सब एक ही कर सकते हैं:

LWP::Simple::getstore($params{URL}, 'image.jpg'); 
संबंधित मुद्दे