2009-10-06 19 views
7

हम इसके उत्तर के लिए थोड़ी देर की तलाश में हैं, लेकिन मुझे कोई समाधान नहीं मिला है।ब्राउज़र डाउनलोड पूर्ण घटना

हमारे पास एक वेब सर्वर है, जो उपयोगकर्ता को फ़ाइलों (पीडीएफएस) डाउनलोड करने की अनुमति देता है, जो गतिशील रूप से जेनरेट किए जाते हैं और सर्वलेट से परोसे जाते हैं। हम जानना चाहते हैं कि डाउनलोड कब पूरा हो गया है (और कैसे: यह सफल रहा, क्या यह असफल रहा, क्या उपयोगकर्ता ने रद्द कर दिया?)।

क्या उपयोगकर्ता इनपुट के बिना इसे जानने का कोई तरीका है? ये फ़ाइलें अपेक्षाकृत छोटी हैं इसलिए कोई प्रगति-बार कार्यक्षमता की आवश्यकता नहीं है, लेकिन हमें किसी प्रकार की "एंड-हुक" की आवश्यकता है जो डाउनलोड समाप्त होने पर वापस रिपोर्ट करता है। क्या यह संभव है?

[संपादित करें] ब्राउज़र-पक्ष पर क्या क्षमता होगी जो अंत डाउनलोड के बारे में पता लगा सकता है और AJAX के माध्यम से सर्वर पर रिपोर्ट कर सकता है?

उत्तर

3

जब तक आपको नेटवर्क त्रुटि नहीं मिलती, तो आप नहीं जान सकते। एकमात्र तरीका यह है कि ब्राउज़र को सर्वर को दूसरी घटना भेजने के लिए (AJAX का उपयोग करके) डाउनलोड करना है कि डाउनलोड सफलतापूर्वक पूरा हो गया है।

+2

ब्राउज़र को सफलतापूर्वक पूरा होने पर ब्राउज़र कैसे पता चलेगा? वास्तव में यह मेरे प्रश्न का सारांश था, मैं इसे स्पष्ट बनाने के लिए संपादित करूंगा – laura

+9

यह उत्तर क्यों स्वीकार किया गया था? हम अभी भी नहीं जानते कि ब्राउजर को डाउनलोड कैसे पता चल सकता है – abyx

+0

लौरा, आप इस जवाब से क्यों सम्मानित हैं?) – dnim

1

भले ही फ़ाइलें छोटी हों, भले ही ServletResponse विधि का उपयोग करें, उपयोगकर्ता एक त्रुटि और एक अच्छा डाउनलोड के बीच अंतर करने में सक्षम होंगे, और उनके ब्राउज़र के डाउनलोड प्रबंधक उन्हें पूरा होने पर बताएंगे।

2

उपयोगकर्ता रद्द करने से कभी-कभी एक सर्वलेट में पता लगाया जा सकता है। उदाहरण के लिए टोमकैट का उपयोग करके, क्लाइंट को बड़ी फ़ाइल स्ट्रीम करने का प्रयास करें, और फिर डाउनलोड रद्द करें। आप लॉग/catalona.out में अपवाद का स्टैकट्रैक देख सकते हैं। मुझे यकीन नहीं है, हालांकि, इसे सर्वलेट में या निचले स्तर (कैटलिना के अंदर) में संभाला जा सकता है।

एक प्रीलोडिंग दृष्टिकोण है (ईवेंट श्रोता सुविधा सुविधा के साथ निश्चित रूप से) छवियों को डाउनलोड करने के लिए आमतौर पर उपयोग किया जाता है। यह पूरे पीडीएफ को डाउनलोड करने के लिए ब्राउज़र पर है या नहीं, अगर यह इसे असमर्थित छवि के रूप में पहचानता है, लेकिन यह कोशिश करने लायक है। Here एक उदाहरण है।

एक और समाधान <object> या <embed> टैग का उपयोग करके पीडीएफ को निहित रूप से डाउनलोड करना होगा, और उनके ऑनलोड ईवेंट श्रोता का उपयोग करना होगा। ऐसा नहीं है कि यह केवल तभी काम करता है जब ब्राउज़र में ActiveX या किसी प्रकार का पीडीएफ फ़ाइल एसोसिएशन किया जाता है, और यदि उपयोगकर्ता के पास पीडीएफ व्यूअर नहीं है तो शायद काम नहीं करेगा। Here यह एक उदाहरण है जो प्रदर्शित करता है (सहायता समाधान देखें: 11/21/04 08:22 पूर्वाह्न, आईडी: 12638846)।

मोहसिन

6

आप जो ब्राउज़र को सीधे जुड़ा हुआ है सर्वर (TCP कनेक्शन के अंतिम बिंदु) से एक बहुत अच्छा विचार हो सकता है। जब उपयोगकर्ता किसी भी नेटवर्क समस्या को डाउनलोड या मुठभेड़ करता है तो सर्वर को आईओ त्रुटि मिल जाएगी। तो यदि आप सीधे सर्वर चला सकते हैं (प्रॉक्सी के बिना)। आप

try { 
     response.setContentType("application/pdf"); 
     response.setContentLength(bytes.length); 
     ServletOutputStream ouputStream = response.getOutputStream(); 
     ouputStream.write(bytes, 0, bytes.length); 
     ouputStream.flush(); 
     ouputStream.close(); 
     logger.info("PDF " + fileName + " sent successfully"); 
    } catch (Exception e) { 
     logger.error("PDF " + fileName + " error: " + e.getMessage()); 
     throw e; 
    } 

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

1

ब्राउज़र मूल रूप से इसे संभाल नहीं करता है लेकिन आप डाउनलोड अनुरोध को संभालने के लिए Google गियर्स का उपयोग कर सकते हैं (डाउनलोड पूर्ण होने पर यह एक सफल घटना को आग लग जाएगा)।

http://code.google.com/apis/gears/api_httprequest.html

0

आप अपने दस्तावेज़ों में एक छवि फ़ील्ड सम्मिलित कर सकते हैं, छवि href पुष्टि करते हैं कि उपयोगकर्ता पीडीएफ दस्तावेज़ खोल लिया है वापस अपने सर्वर को इंगित कर सकते हैं।

मैंने इसे स्वयं नहीं किया है लेकिन last page of this adobe doc को देखकर संभव लगता है।

यदि आप Itext का उपयोग कर रहे हैं तो यह छवि फ़ील्ड का समर्थन नहीं करता है, लेकिन आप छवि दस्तावेज़ के साथ एक पीडीएफ टेम्पलेट का उपयोग अपने दस्तावेज़ बनाने और छवि क्षेत्र में यूआरएल असाइन करने के लिए जावास्क्रिप्ट जोड़ सकते हैं।

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