2013-12-10 6 views
13

के साथ डाउनलोड करते समय मूल फ़ाइल नाम प्राप्त करें क्या यूरी में नाम नहीं होने पर वेब क्लाइंट का उपयोग करके डाउनलोड की गई फ़ाइल का मूल नाम जानने का कोई तरीका है?वेब क्लाइंट

उदाहरण के लिए यह उन साइटों में होता है जहां डाउनलोड एक गतिशील पृष्ठ से निकलता है जहां नाम पहले से ज्ञात नहीं है।

मेरे ब्राउज़र का उपयोग करके, फ़ाइल को सही नाम मिलता है। लेकिन WebClient का उपयोग करके यह कैसे किया जा सकता है? ईजी।

 WebClient wc= new WebClient(); 
     var data= wc.DownloadData(@"www.sometime.com\getfile?id=123"); 

डाउनलोडफाइल का उपयोग करना() एक समाधान नहीं है क्योंकि इस विधि को पहले से ही एक फ़ाइल नाम की आवश्यकता है।

+3

क्या आपने 'wc.ResponseHeaders' की जांच करने का प्रयास किया है? फ़ाइल डाउनलोड में आमतौर पर फ़ाइल नाम के साथ एक अनुलग्नक शीर्षलेख होता है। – Tobberoth

+0

टोबबरथ। वह वास्तव में जवाब है! उसे नहीं पता था। बहुत बहुत धन्यवाद! –

उत्तर

27

आप प्रतिक्रिया हेडर की जांच करने की जरूरत है और देखो अगर वहाँ एक सामग्री-स्वभाव शीर्षलेख मौजूद है जिसमें वास्तविक फ़ाइल नाम शामिल है।

WebClient wc = new WebClient(); 
var data= wc.DownloadData(@"www.sometime.com\getfile?id=123"); 
string fileName = ""; 

// Try to extract the filename from the Content-Disposition header 
if (!String.IsNullOrEmpty(wc.ResponseHeaders["Content-Disposition"])) 
{ 
fileName = wc.ResponseHeaders["Content-Disposition"].Substring(wc.ResponseHeaders["Content-Disposition"].IndexOf("filename=") + 9).Replace("\"", ""); 
} 
+0

'System.Net.Mime.ContentDisposition' हैडर' वर हैडर = नए ContentDisposition (wc.ResponseHeaders [ "ContentDisposition"]) पार्स करने के लिए इस्तेमाल किया जा सकता है, ' –

+2

धन्यवाद, लेकिन सही है" .... इंडेक्सऑफ ("फाइलनाम =") + 9) .... " –

+0

@ राफेल ज़िमर्मन आप सही हैं। मेरा जवाब अपडेट किया गया। धन्यवाद। – HaukurHaf

5

WebClient.ResponseHeaders

साथ प्रतिक्रिया हैडर "Content-Disposition" पढ़ें यह होना चाहिए:

Content-Disposition: attachment; filename="fname.ext" 

अपने कोड देखो की तरह करना चाहिए:

string header = wc.ResponseHeaders["Content-Disposition"]??string.Empty; 
const string filename="filename="; 
int index = header.LastIndexOf(filename,StringComparison.OrdinalIgnoreCase); 
if (index > -1) 
{ 
    fileName = header.Substring(index+filename.Length); 
} 
+1

अच्छा जवाब है लेकिन सूचकांक को "filename =" की लंबाई के लिए खाते में उन्नत होना आवश्यक है। IMHO मैं इसे फ़ाइल नाम = हेडर में बदल दूंगा। सब्सट्रिंग (अनुक्रमणिका + "filename =" लंबाई); – pbarranis

+2

@pbarranis आप सही, सही! – giammin

संबंधित मुद्दे