2008-09-23 10 views
56

मैं इसे डाउनलोड करने से पहले http: /.../ फ़ाइल का आकार प्राप्त करना चाहता हूं। फ़ाइल एक वेबपृष्ठ, छवि, या एक मीडिया फ़ाइल हो सकती है। क्या यह HTTP हेडर के साथ किया जा सकता है? मैं केवल फ़ाइल हेडर फ़ाइल कैसे डाउनलोड करूं?http शीर्षलेखों से फ़ाइल आकार कैसे प्राप्त करें

उत्तर

84

हाँ, HTTP सर्वर आप का समर्थन करता है के लिए बात कर रहे हैं यह सोचते हैं/इस अनुमति देता है:

System.Net.WebRequest req = System.Net.HttpWebRequest.Create("http://stackoverflow.com/robots.txt"); 
req.Method = "HEAD"; 
using (System.Net.WebResponse resp = req.GetResponse()) 
{ 
    int ContentLength; 
    if(int.TryParse(resp.Headers.Get("Content-Length"), out ContentLength)) 
    { 
     //Do something useful with ContentLength here 
    } 
} 

तो प्रमुख विधि का उपयोग की अनुमति नहीं है, या सामग्री-लंबाई हेडर सर्वर जबाब में मौजूद नहीं है, सर्वर पर सामग्री का आकार निर्धारित करने का एकमात्र तरीका इसे डाउनलोड करना है। चूंकि यह विशेष रूप से विश्वसनीय नहीं है, इसलिए अधिकांश सर्वरों में यह जानकारी शामिल होगी।

+11

यदि आप 'उपयोग' का उपयोग करते हैं तो यह स्वचालित रूप से इसका निपटान करता है। http://msdn.microsoft.com/en-us/library/yh598w02(v=vs.110).aspx – justderb

+2

एक और नोट, यदि आप इसे बहुत बड़ी फ़ाइलों 'int' के लिए उपयोग कर रहे हैं, तो पर्याप्त नहीं है, आपको आवश्यकता होगी एक 2.14 जीबी आकार वापसी मूल्य से अधिक समर्थन के लिए 'लंबी सामग्री लम्बाई;' और 'long.TryParse (xxx)' का उपयोग करने के लिए। – Preston

+0

क्या HTTP संपीड़न सक्षम नहीं किया जा रहा है वास्तविक फ़ाइल आकार को फेंक दें? – Justin

25

क्या यह HTTP शीर्षलेखों के साथ किया जा सकता है?

हां, यह जाने का रास्ता है। यदि जानकारी प्रदान की जाती है, तो यह शीर्षलेख में Content-Length है। नोट, हालांकि, यह जरूरी नहीं है कि मामला।

केवल शीर्षलेख डाउनलोड करना GET के बजाय HEAD अनुरोध का उपयोग करके किया जा सकता है। हो सकता है कि निम्नलिखित कोड में मदद करता है:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://example.com/"); 
req.Method = "HEAD"; 
long len; 
using(HttpWebResponse resp = (HttpWebResponse)(req.GetResponse())) 
{ 
    len = resp.ContentLength; 
} 

सूचना HttpWebResponse वस्तु पर सामग्री की लंबाई के लिए संपत्ति - मैन्युअल Content-Length हैडर पार्स करने के लिए कोई जरूरत नहीं।

+0

ऊपर 'respont.ContentLength' आपको सिर प्रतिक्रिया की लंबाई नहीं देगा, और उस फ़ाइल की लंबाई नहीं जिसे आप आकार प्राप्त करने में रुचि रखते थे? –

+1

@Adam No. प्रलेखन कहता है: "ContentLength गुण में प्रतिक्रिया के साथ लौटाए गए सामग्री-लंबाई शीर्षलेख का मान होता है।" –

+1

सही है, धन्यवाद, कोनराड धन्यवाद। –

0
WebClient webClient = new WebClient(); 
webClient.OpenRead("http://stackoverflow.com/robots.txt"); 
long totalSizeBytes= Convert.ToInt64(webClient.ResponseHeaders["Content-Length"]); 
Console.WriteLine((totalSizeBytes)); 
संबंधित मुद्दे