2011-03-04 17 views
14

के माध्यम से डाउनलोड करें जेएस या जावास्क्रिप्ट के माध्यम से डाउनलोड को मजबूर करना संभव है यानी वेब पेज को ब्राउज़र में नए टैब में फ़ाइल नहीं खोलनी चाहिए, लेकिन उपयोगकर्ता को "इस रूप में सहेजें" चुनने के लिए पॉप अप करना है या के साथ खुला ???जेएस या क्वेरी

+3

इसका डुप्लिकेट? http://stackoverflow.com/questions/727144/browser-download-file-prompt-using-javascript –

+0

यह वास्तव में है। उपयोगी डुप्लिकेट का अच्छा उदाहरण, क्योंकि प्रश्न शीर्षक को काफी अलग तरीके से कहा जाता है, भले ही यह एक ही चीज़ के बारे में बात कर रहा हो। –

उत्तर

11

आप जावास्क्रिप्ट से उस व्यवहार के लिए मजबूर नहीं कर सकते, HTTP हेडर सर्वर साइड पर तय करने की आवश्यकता पीडीएफ का URL:

(ऊपर HTTP हेडर पीडीएफ के लिए सेट किया जाना चाहिए)

+0

अब [डाउनलोड] (http://caniuse.com/#search=download) विशेषता के साथ यह संभव है। – mpen

+0

@mpen हाँ, और ऐसा कोई जवाब है जो ऐसा कहता है। प्रश्न के समय, यह –

+1

यूप उपलब्ध नहीं था। यह नहीं कह रहा कि आपको अपना जवाब बदलने की जरूरत है, लेकिन यह शीर्ष पर दिखाई देता है और यह स्वीकार किया जाता है, इसलिए मैं लोगों को यह बता रहा हूं कि आगे स्क्रॉल करने के लिए बहुत आलसी हैं :-) – mpen

4

नहीं, यह संभव नहीं है और धन्यवाद भगवान यह नहीं है। अन्यथा मैं आपको कल्पना करता हूं कि जब आप किसी वेबसाइट पर जाते हैं तो आप अपने कंप्यूटर पर किस तरह की फाइलें संग्रहीत कर सकते हैं।

जैसा कि @ पॉल डी। व्हाइट ने टिप्पणी अनुभाग में बताया है कि यदि आप फ़ाइल इनलाइन (ब्राउज़र के अंदर) को खोलने के लिए डिफ़ॉल्ट प्रोग्राम के साथ खोलना चाहते हैं तो आप सर्वर को सामग्री-डिस्पोजिशन HTTP शीर्षलेख भेज सकते हैं। उदाहरण के लिए:

Content-Disposition: inline; filename=foo.pdf 
+1

तो मैं इसे कैसे कर सकता हूं। – Shaun

+0

सही: आप इसे केवल सर्वर-पक्ष पर ही कर सकते हैं, क्योंकि यह HTTP प्रतिक्रिया शीर्षलेख (विशेष रूप से 'सामग्री-स्वभाव: अनुलग्नक') सेट करके किया जाता है। एक बार क्लाइंट में पृष्ठ खुलने के बाद, HTTP प्रतिक्रिया, परिभाषा के अनुसार, पहले ही संसाधित हो चुकी है। –

+0

पूछताछकर्ता स्पष्ट रूप से कहता है कि वह इसे एक नया टैब खोलने के दौरान एक संवाद के साथ उपयोग करना चाहता है, तो यह बिल्कुल सही नहीं है कि आप क्या जवाब दे रहे हैं? – gnur

2

कोई भी JQuery/जावास्क्रिप्ट के साथ ही संभव नहीं है।

आपको एक सर्वर साइड स्क्रिप्ट की आवश्यकता होगी जो आपको Content-Type (HTTP शीर्षलेख) के साथ फ़ाइल देता है जो ब्राउज़र को आपकी अनुरोधित फ़ाइल डाउनलोड करने के लिए मजबूर करेगा। Content-Type के लिए एक संभावित मूल्य application/force-download होगा।

Content-disposition=attachment; filename=some.file.name 

जिस तरह से आप समस्या को हल कर सकते हैं आपके AJAX विधि करने के लिए उपयोगकर्ता अनुप्रेषित जाने के लिए है:

37
एचटीएमएल 5 के आगमन तुम सिर्फ लंगर में नई संपत्ति डाउनलोड इस्तेमाल कर सकते हैं के साथ

टैग।

कोड

<a download="name_of_downloaded_file" href="path/to/the/download/file"> Clicking on this link will force download the file</a> 

यह फ़ायरफ़ॉक्स और क्रोम नवीनतम संस्करण पर काम करता है कुछ ऐसी दिखाई देगी। क्या मुझे जिक्र करना चाहिए कि मैंने इसे आईई में नहीं देखा? : पी

sstur से टिप्पणी के बाद डाउनलोड विशेषता संपादित

+2

यह ध्यान देने योग्य है कि आप डाउनलोड के लिए एक मान निर्दिष्ट कर सकते हैं विशेषता और यह डाउनलोड के लिए डिफ़ॉल्ट फ़ाइल नाम बन जाएगा। – sstur

+1

यह वास्तव में अधिक प्रगतिशील समाधान है, लेकिन नवंबर/2013 तक आईई या अधिकांश मोबाइल उपकरणों पर कोई समर्थन नहीं है। (स्रोत: http://caniuse.com/#feat=download) – mcranston18

+1

यह ओपेरा या आईई के साथ काम नहीं करता है, हालांकि यह मुझे अभी भी इस समाधान को पसंद है। –

13

गतिशील लिंक बना सकते हैं और फ़ाइल के रूप में बल डाउनलोड के लिए डाउनलोड विशेषता के साथ क्लिक करें:

var anchor = document.createElement('a'); 
anchor.href = this.props.download_url; 
anchor.target = '_blank'; 
anchor.download = this.props.file_name; 
anchor.click(); 

एक नोटिस है कि मैं भी जोड़ा नहीं किया ले लो यह डोम के लिए, तो यह तेज़ है।

पीएस download विशेषता आईई के साथ काम नहीं करेगी। लेकिन यह सिर्फ नए टैब में लिंक खुल जाएगा। http://caniuse.com/#feat=download

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