मुझे सही जवाब के लिए अग्रणी के लिए पीटर कोवाक्स 'जवाब देने के लिए बहुत धन्यवाद: LWP :: UserAgent के लिये दस्तावेज को देखते हुए, आप एक content_cb
कुंजी जो डाउनलोड की गई फ़ाइल के प्रत्येक टुकड़ा के साथ कहा जाता है प्रदान कर सकते हैं। यह अपेक्षा की तुलना में थोड़ा अधिक विस्तृत साबित हुआ, हालांकि मैंने फैसला किया कि (डरावनी) मेरे अपने प्रश्न का उत्तर दें।
के रूप में पीटर से पता चला है, मैं इतना की तरह एक कॉलबैक सेट कर सकते हैं:
$m->get($u, ":content_cb" => \&callback);
लेकिन अब मैं का उपयोग कर सामग्री नहीं बचा सकते हैं:, content_file मूल्य क्योंकि मैं केवल दो में से एक चुन सकते हैं। कॉलबैक फ़ंक्शन डेटा पास कर देता है, और मैंने इसके बजाय फ़ाइल में लिखना समाप्त कर दिया।
मुझे एक प्रतिक्रिया वस्तु भी मिलती है जिसमें सामग्री का कुल आकार होता है जैसे फ्रेडेडो ने बताया। तो कुल सामग्री द्वारा अब तक प्राप्त सामग्री की कुल संख्या को रखकर और इसे विभाजित करके मैं यह पता लगा सकता हूं कि सामग्री का प्रतिशत किस प्रकार डाउनलोड किया गया है। यहां पूर्ण कॉलबैक फ़ंक्शन है:
open (VID,">$i.flv") or die "$!";
$total = 0;
sub callback
{
my($data, $response, $proto) = @_;
print VID "$data"; # write data to file
$total+= length($data);
$size = $response->header('Content-Length');
print floor(($total/$size)*100),"% downloaded\n"; # print percent downloaded
}
मुझे आशा है कि किसी की सहायता करें।
स्रोत
2009-12-21 05:59:48
इससे मदद मिलती है। धन्यवाद :) – Mike
यह मेरे लिए काम करता है। मैं डेटा हैंडल का उपयोग केवल आंकड़ों के लिए एक temp फ़ाइल के रूप में करने में सक्षम था। मैं बैकस्पेस में '\ r' का उपयोग करता हूं और टर्मिनल को एक पंक्ति पर रखता हूं क्योंकि डाउनलोड किया गया प्रतिशत बढ़ जाता है और मैंने '$ m-> प्राप्त करने के बाद किया ($ u,": content_cb "=> \ & callback);' कॉल ' $ m-> save_content ($ newLocation); 'यह सामग्री को दो बार डाउनलोड नहीं करता है। एक 250 एम फ़ाइल पर परीक्षण किया। – DataHerder