2009-01-07 11 views
5

हमारी वर्तमान परियोजना में हम एक पीडीएफ डाउनलोड प्रदान कर रहे हैं जिसे उपयोगकर्ता द्वारा सबमिट किए गए HTML फॉर्म के माध्यम से अनुकूलित किया जा सकता है। गतिशील रूप से पीडीएफ उत्पन्न करने में कई सेकंड लगते हैं और मैं इसे कल्पना करना चाहता हूं, उदा। डाउनलोड शुरू होने तक सबमिट बटन को अक्षम करके। दुर्भाग्यवश, डाउनलोड शुरू होने पर मुझे पता लगाने का कोई तरीका नहीं मिला। इसलिए मुझे नहीं पता कि सबमिट बटन को फिर से सक्षम करना कब होगा।जावास्क्रिप्ट में डाउनलोड की शुरुआत का पता लगाने का कोई तरीका है?

मैंने पहले से ही अपने HTML फॉर्म के लक्ष्य के रूप में IFrame निर्दिष्ट करने का प्रयास किया है, यह उम्मीद करते हुए कि onload ईवेंट ट्रिगर किया जाएगा। हालांकि, ऐसा नहीं है - शायद क्योंकि पीडीएफ को "Content-disposition: attachment" हेडर के साथ भेजा गया है और यह वास्तव में IFrame में लोड नहीं होता है।

एकमात्र समाधान जो मैं अभी सोच सकता हूं, उसमें पीडीएफ को सर्वर पर एक अस्थायी फ़ाइल में उत्पन्न करना शामिल है, जिसे मैं टालना चाहता हूं।

*) मुझे यह स्पष्ट करने दें: मुझे यह जानने की आवश्यकता नहीं होगी कि डाउनलोड समाप्त हो गया था या फिर भी यह वास्तव में शुरू हुआ था। मैं उस बिंदु का पता लगाना चाहता हूं जिस पर ब्राउजर उपयोगकर्ता से पूछता है कि फ़ाइल खोलना या सहेजना है या नहीं। मुझे लगता है कि यह तब होता है जब ब्राउज़र HTTP शीर्षलेख प्राप्त करता है।

+0

क्या आप जानना चाहते हैं कि डाउनलोड कब शुरू होता है या कब पूरा होता है? किसी भी तरह से, मुझे नहीं लगता कि एक अस्थायी फ़ाइल एक फर्क पड़ेगी। क्लाइंट-साइड पर आप यह नहीं बता सकते कि फ़ाइल सर्वर पर बैठी थी या फ्लाई पर जेनरेट की गई थी। – Prestaul

+0

तो आप फॉर्म जमा करते हैं, और इस सबमिशन की प्रतिक्रिया एक पीडीएफ फ़ाइल है? विराम के दौरान, ब्राउज़र उस मोड में है जहां यह सर्वर से प्रतिक्रिया की प्रतीक्षा कर रहा है? क्या ये सही है? – Breton

+0

@ ब्रेटन: सही! @Pretaul: मैं जानना चाहता हूं कि डाउनलोड कब शुरू होता है। इसलिए, मैं एक temp फ़ाइल बना सकता हूं, छिपे हुए IFrame को कुछ HTML प्रतिक्रिया प्रदान कर सकता हूं, और उसके बाद ओपन लोड हैंडलर में जावास्क्रिप्ट द्वारा temp फ़ाइल ला सकता हूं। –

उत्तर

2

आप जो चाहते हैं उसे पहचानने में सक्षम होना चाहिए जब डाउनलोड की गई फ़ाइल का आकार 0 से सकारात्मक मान में बदल जाता है। जहां तक ​​मुझे पता है कि जावास्क्रिप्ट के साथ ऐसा करना असंभव है - आपको एक प्लग-इन की आवश्यकता है जो क्लाइंट की फाइल सिस्टम तक पहुंच सके।

एक अनुशंसित कार्य आसपास: एक सत्र प्रति डाउनलोड बनाएं। क्लाइंट को डाउनलोड की स्थिति के बारे में सर्वर को मतदान करें। यह "अस्तित्व में नहीं", "शुरू नहीं हुआ", "शुरू हुआ", "समाप्त" हो सकता है। डाउनलोड की स्थिति और AJAX फ्रेमवर्क की स्थिति को जारी रखने और अपडेट करने के लिए आपको कुछ सर्वर के साइड काम की आवश्यकता है।

+0

आपके उत्तर के लिए धन्यवाद! मुझे वास्तव में वास्तविक डाउनलोड (फ़ाइल में) की परवाह नहीं है, यह जानकर कि HTTP प्रतिक्रिया शीर्षलेख प्राप्त होने पर पर्याप्त होगा। मैं अभी तक पूरी तरह से आश्वस्त नहीं हूं, कि यह जावास्क्रिप्ट में नहीं किया जा सकता है। –

+0

आपके सुझाए गए काम के आसपास की तुलना में थोड़ा अधिक जटिल है।लेकिन मुझे लगता है कि यह काम करेगा और यह निश्चित रूप से अब तक का सबसे अच्छा विचार है। –

+0

मुझे अभी भी पूरा विश्वास नहीं है कि एक बेहतर समाधान है। लेकिन मैंने अब सत्र/स्थिति विचार लागू किया है, इसलिए मैं इस जवाब को स्वीकार करूंगा। एक बार फिर धन्यवाद। –

0

सबसे सरल समाधान समय (उदारतापूर्वक) का अनुमान लगाने और इस तरह से करना होगा। यह एक हैक है, लेकिन यह वांछित प्रभाव देता है। दूसरा विकल्प फॉर्म जमा करने के लिए अजाक्स का उपयोग करके कॉलबैक के साथ फॉर्म जमा करना होगा और कॉलिंग पेज पर जेनरेटर रिटर्न विवरण देना होगा। http://www.jquery.com/ उस विकल्प के लिए शुरू करने के लिए एक अच्छी जगह हो सकती है।

4

यदि मैं आप थे, तो मैं जानकारी के साथ सर्वर पर एक AJAX कॉल करता हूं, फ़ाइल उत्पन्न करता हूं, फिर फ़ाइल नाम/आईडी/जो भी जावास्क्रिप्ट पर वापस लौटाता है, जो तब विंडो बनाता है। स्थान कुछ डाउनलोड.php id = x (लेकिन फ़ाइल पहले से ही जेनरेट की गई थी, इसलिए यह केवल हेडर सेट कर रहा है और इसे पढ़ रहा है) जिस बिंदु पर आप सबमिट को फिर से सक्षम कर सकते हैं।

+0

आपके उत्तर के लिए धन्यवाद! आप जो वर्णन कर रहे हैं वह "अस्थायी फ़ाइल" समाधान है जिसका मैंने उल्लेख किया है और मैं इससे बचना चाहता हूं। –

+0

ओह, मेरी माफ़ी। पूरी तरह से उस हिस्से को नहीं देखा। –

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