ठीक है, अपने समाधान लगभग काम करता है।
रद्द केवल विशिष्ट URLs क्या आप जानते हैं एक डाउनलोड हो जाएगा के लिए डिफ़ॉल्ट नेविगेशन, या उपयोगकर्ता कहीं भी नेविगेट करने में सक्षम नहीं होगा: वहाँ ध्यान में रखना यह सरल रखने के लिए कुछ चीजें हैं। इसका मतलब है कि आप अपनी वेबसाइट डाउनलोड यूआरएल नहीं बदल सकते हैं।
DownloadFileAsync
Content-Disposition
शीर्षलेख में सर्वर द्वारा रिपोर्ट किए गए नाम को नहीं जानता है, इसलिए आपको एक निर्दिष्ट करना होगा, या यदि संभव हो तो मूल URL से गणना करें। आप फ़ोल्डर को निर्दिष्ट नहीं कर सकते हैं और फ़ाइल नाम स्वचालित रूप से पुनर्प्राप्त होने की उम्मीद कर सकते हैं।
आपको DownloadCompleted
कॉलबैक से डाउनलोड सर्वर त्रुटियों को संभालना होगा क्योंकि वेब ब्राउज़र नियंत्रण अब आपके लिए नहीं करेगा।
नमूना कोड का टुकड़ा, उस निर्देशिका textBox1
में निर्दिष्ट में डाउनलोड करेंगे, लेकिन एक यादृच्छिक फ़ाइल नाम के साथ, और किसी भी अतिरिक्त त्रुटि हैंडलिंग के बिना:
private void webBrowser1_Navigating(object sender, WebBrowserNavigatingEventArgs e) {
/* change this to match your URL. For example, if the URL always is something like "getfile.php?file=xxx", try e.Url.ToString().Contains("getfile.php?") */
if (e.Url.ToString().EndsWith(".zip")) {
e.Cancel = true;
string filePath = Path.Combine(textBox1.Text, Path.GetRandomFileName());
var client = new WebClient();
client.DownloadFileCompleted += client_DownloadFileCompleted;
client.DownloadFileAsync(e.Url, filePath);
}
}
private void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e) {
MessageBox.Show("File downloaded");
}
यह समाधान काम करना चाहिए लेकिन हो सकता है बहुत आसानी से टूटा हुआ। उपलब्ध फ़ाइलों को डाउनलोड करने के लिए उपलब्ध कुछ वेब सेवा पर विचार करने की कोशिश करें और इसके लिए एक कस्टम यूआई बनाएं। यह आसान होगा और आप पूरी प्रक्रिया को नियंत्रित करेंगे।
स्रोत
2011-07-24 12:49:54
पोस्ट प्रासंगिक के कुछ हिस्सों: क्योंकि आप पहली बार एक लॉगिन अनुकरण करना चाहते हैं, तो आप इस बढ़ाया WebBrowser जो विंडोज Urlmon लिब से "URLDownloadToFile" विधि हुक और WebBrowser
Infos के संदर्भ का उपयोग करता है का उपयोग कर सकते यहां आपका कोड, सीधे प्रश्न में। बाहरी लिंक का प्रयोग न करें। –
@ एंडर्स हाबेल, फिक्स्ड! –
क्या आप सहेजने वाले फ़ाइल UI के ब्राउज़र के कार्यान्वयन को ओवरराइड करने का प्रयास कर रहे हैं? यदि आप स्ट्रीम में फ़ाइल लिखते हैं और सामग्री प्रकार में निर्दिष्ट करते हैं तो यह बहुत आसान होगा कि यह एक फ़ाइल है ... अगर मुझे सही याद है कि आपके पास आपके क्लाइंट के फाइल सिस्टम तक पहुंच नहीं है ... आप पथों पर फ़ाइलों को डाउनलोड नहीं कर सकते क्लाइंट पर इसलिए इसे इनपुट के रूप में लेना किसी भी उपयोग का नहीं है .. – Mulki