2012-11-26 18 views
6

मैं इस समस्या के लिए दिनों के लिए समाधान ढूंढ रहा हूं और मुझे कोई भी नहीं मिला।सामग्री-विस्थापन के बिना फ़ाइल नाम प्राप्त करें

मैं वेबसाइवर से वेबसर्वर से एक फ़ाइल डाउनलोड करना चाहता हूं। डाउनलोड ठीक काम करता है, लेकिन मुझे वास्तविक फ़ाइल नाम नहीं मिल सकता है, जो मेरे लिए बहुत महत्वपूर्ण है।

मैंने कई होमपेजों पर पढ़ा है, कि फ़ाइल नाम सामग्री-विस्थापन-शीर्षलेख में सहेजा जाना चाहिए। दुर्भाग्यवश साइट का यह शीर्षलेख खाली है। मैंने इसे प्राप्त करने का प्रयास किया:

string header_contentDisposition =""; 
using (WebClient client = new WebClient()) 
      { 
       client.OpenRead(link); 

       header_contentDisposition = client.ResponseHeaders["Content-Disposition"]; 
       MessageBox.Show(header_contentDisposition); 
      } 

इस शीर्षलेख के अंदर कोई जानकारी सहेजी नहीं गई है।

यदि मैं अपने ब्राउज़र (आईई, ओपेरा, क्रोम) के साथ फ़ाइल डाउनलोड करने का प्रयास करता हूं तो फ़ाइल नाम दायरियलॉग में दिखाया जाता है, इसलिए इसे कहीं सेव किया जाना चाहिए।

क्या आप कल्पना कर सकते हैं कि मुझे यह कहां मिल सकता है?

संपादित करें: मैं, URL से अलग नहीं कर सकता क्योंकि लिंक की तरह

http://www.example.com/download.php?id=10 
+1

क्या आप हेडर को डंप कर सकते हैं जो * मौजूद हैं? या शायद ब्राउज़र यूआरएल से इसे डिफॉल्ट कर रहे हैं? –

+0

सभी हेडर मुझे मिल गया: आयु = 292,161 कनेक्शन = जीवित-रखें स्वीकार करें-सीमाओं = बाइट्स सामग्री-लंबाई = 15,953,830 कैश-नियंत्रण = अधिकतम उम्र = 31,536,000 सामग्री प्रकार = आवेदन/vnd.android। पैकेज-आर्काइव दिनांक = शुक्र, 23 नवंबर 2012 09:21:40 GMT समाप्त हो जाता है = शनि, 23 नवंबर 2013 09:21:40 GMT अंतिम-संशोधित = शुक्र, 23 नवंबर 2012 08:38:35 GMT सर्वर = nginx – user1854270

+0

क्या आप हमें एक वास्तविक यूआरएल दे सकते हैं ताकि हम इसे पुन: पेश कर सकें? उदाहरण के लिए –

उत्तर

15

php द्वारा उत्पन्न होता है तो आपको यह कोशिश कर सकते हैं: http://upload.p-kratzer.com/index.php?dir=&file=asdfasdfwervdcvvedb पर

 HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url); 
     try 
     { 

      HttpWebResponse res = (HttpWebResponse)request.GetResponse(); 
      using (Stream rstream = res.GetResponseStream()) 
      { 
       string fileName = res.Headers["Content-Disposition"] != null ? 
        res.Headers["Content-Disposition"].Replace("attachment; filename=", "").Replace("\"", "") : 
        res.Headers["Location"] != null ? Path.GetFileName(res.Headers["Location"]) : 
        Path.GetFileName(url).Contains('?') || Path.GetFileName(url).Contains('=') ? 
        Path.GetFileName(res.ResponseUri.ToString()) : defaultFileName; 
      } 
      res.Close(); 
     } 
     catch { } 

इस परीक्षण किया गया और यह करता है वापसी गीला। जेपीजी।

+0

ग्रेट लुनिक्स है। धन्यवाद। लेकिन जब मैं Google ड्राइव लिंक के लिए इसका उपयोग करता हूं तो एक बड़ी परिणाम स्ट्रिंग प्राप्त होती है। उदाहरण के लिए "अनुलग्नक; फ़ाइल नाम = filename.apk; फ़ाइल नाम * = यूटीएफ -8 '' filename.apk" – smedasn

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