मेरे पास एक ऐसा पृष्ठ है जो उपयोगकर्ता को गतिशील रूप से जेनरेट की गई फ़ाइल डाउनलोड करने की अनुमति देता है। उत्पन्न करने में काफी समय लगता है, इसलिए मैं एक "प्रतीक्षा" संकेतक दिखाना चाहता हूं। समस्या यह है कि, मुझे पता नहीं लगा सकता कि ब्राउज़र को फ़ाइल कब प्राप्त हुई है, इसलिए मैं संकेतक को छुपा सकता हूं।पता लगाएं कि ब्राउज़र को फ़ाइल डाउनलोड कब प्राप्त होता है
मैं एक छिपे हुए फॉर्म में अनुरोध कर रहा हूं, जो सर्वर पर पोस्ट करता है, और इसके परिणामों के लिए एक छिपा हुआ आईफ्रेम लक्षित करता है। ऐसा इसलिए है कि मैं परिणाम के साथ पूरी ब्राउज़र विंडो को प्रतिस्थापित नहीं करता हूं। मैं आईफ्रेम पर "लोड" ईवेंट सुनता हूं, उम्मीद है कि डाउनलोड पूर्ण हो जाने पर यह आग लग जाएगी।
मैं फ़ाइल के साथ "सामग्री-विस्थापन: अनुलग्नक" शीर्षलेख लौटाता हूं, जिससे ब्राउज़र "सहेजें" संवाद दिखाता है। लेकिन ब्राउज़र आईफ्रेम में "लोड" ईवेंट नहीं चलाता है।
मैंने कोशिश की एक दृष्टिकोण एक बहु-पक्ष प्रतिक्रिया का उपयोग कर रहा है। तो यह एक खाली HTML फ़ाइल, साथ ही संलग्न डाउनलोड करने योग्य फ़ाइल भेज देगा। उदाहरण के लिए:
Content-type: multipart/x-mixed-replace;boundary="abcde"
--abcde
Content-type: text/html
--abcde
Content-type: application/vnd.fdf
Content-Disposition: attachment; filename=foo.fdf
file-content
--abcde
यह फ़ायरफ़ॉक्स में काम करता है; यह खाली HTML फ़ाइल प्राप्त करता है, "लोड" ईवेंट को सक्रिय करता है, फिर डाउनलोड करने योग्य फ़ाइल के लिए "सहेजें" संवाद दिखाता है। लेकिन यह आईई और सफारी पर विफल रहता है; आईई "लोड" घटना को फायर करता है लेकिन फ़ाइल डाउनलोड नहीं करता है, और सफारी फ़ाइल डाउनलोड करता है (गलत नाम और सामग्री-प्रकार के साथ), और "लोड" ईवेंट को आग नहीं करता है।
फ़ाइल निर्माण शुरू करने के लिए कॉल करने के लिए एक अलग दृष्टिकोण हो सकता है, फिर सर्वर तैयार होने तक मतदान करें, फिर पहले से बनाई गई फ़ाइल डाउनलोड करें। लेकिन मैं सर्वर पर अस्थायी फ़ाइलों को बनाने से बचाना चाहता हूं।
क्या किसी के पास कोई बेहतर विचार है?
IE के कोई संस्करण बहुखण्डीय/एक्स मिश्रित की जगह का समर्थन करता है। – EricLaw
धन्यवाद एरिक - यह जानना अच्छा है। मैं उस दृष्टिकोण के साथ और अधिक समय बर्बाद नहीं करूंगा। –
केवल विश्वसनीय तरीका सर्वर पुश अधिसूचना (एएसपी.नेट लोगों के लिए सिग्नलआर) प्रतीत होता है। – dudeNumber4