मैं सोच रहा था कि उन्हें ब्राउज़र में खोलने के बजाय पीडीएफ फाइल लिंक को डाउनलोड करने योग्य कैसे बनाया जाए? यह html में कैसे किया जाता है? (मुझे लगता है कि यह जावास्क्रिप्ट या कुछ और के माध्यम से किया जाता है)।
मैं सोच रहा था कि उन्हें ब्राउज़र में खोलने के बजाय पीडीएफ फाइल लिंक को डाउनलोड करने योग्य कैसे बनाया जाए? यह html में कैसे किया जाता है? (मुझे लगता है कि यह जावास्क्रिप्ट या कुछ और के माध्यम से किया जाता है)।
जवाबों:
आप HTML के साथ ऐसा नहीं कर सकते। यह एक सर्वर-आधारित समाधान है। आपको फ़ाइल को स्ट्रीम करना होगा ताकि ब्राउजर सेव डायल को ट्रिगर कर सके।
मैं यह नहीं करने की सलाह दूंगा। कैसे एक उपयोगकर्ता पीडीएफ के साथ बातचीत उपयोगकर्ता को छोड़ दिया जाना चाहिए।
अद्यतन (2014):
तो ... इस जवाब को अभी भी बहुत सारे डाउनवोट मिलते हैं। मुझे लगता है कि इसका मतलब यह है कि यह 4 साल पहले उत्तर दिया गया था और जैसा कि सरिम बताते हैं, अब HTML 5 downloadविशेषता है जो इसे संभाल सकती है।
मैं सहमत हूं, और लगता है कि सरीम का उत्तर अच्छा है (यह शायद चुना हुआ उत्तर होना चाहिए अगर ओपी कभी वापस लौटता है)। हालाँकि, यह उत्तर अभी भी इसे संभालने का विश्वसनीय तरीका है (जैसा कि यिशिट यनर का उत्तर बताता है और - अजीब तरह से - लोग इससे सहमत हैं)। जबकि डाउनलोड विशेषता को समर्थन प्राप्त हुआ है, यह अभी भी धब्बेदार है:
httpप्रश्न में केवल टैग जोड़ें । पैराग्राफ 2 के बजाय: "आप पुनर्विचार करना चाह सकते हैं कि क्या तत्काल पीडीएफ देखने को रोकना सभी उपयोगकर्ताओं के सर्वोत्तम हित में है। कहा जा रहा है कि ..." फिर मान लें कि ओपी और भविष्य के पाठक वयस्क हैं और एक्शन के जवाब में आगे बढ़ें जैसे कि येनर ।
Html5 के साथ, यह अब संभव है। तत्व में एक "डाउनलोड" attr सेट करें।
<a href="http://link/to/file" download="FileName">Download it!</a>
स्रोत: http://updates.html5rocks.com/2011/08/Downloading-resources-in-HTML5-a-download
if ("download" in document.createElement("a")){ ... }
यह सर्वर साइड कोड द्वारा http प्रतिक्रिया हेडर सेट करने के साथ ही संभव है। अर्थात्;
Content-Disposition: attachment; filename=fname.ext
आपको भेजे गए http हेडर को बदलने की आवश्यकता है। आपके सर्वर के आधार पर, आप अपने .htaccess को निम्नानुसार संशोधित कर सकते हैं:
<FilesMatch "\.(?i:pdf)$">
ForceType application/octet-stream
Header set Content-Disposition attachment
</FilesMatch>
आपको PHP स्क्रिप्ट (या इसके लिए अन्य सर्वर साइड भाषा) का उपयोग करना होगा
<?php
// We'll be outputting a PDF
header('Content-type: application/pdf');
// It will be called downloaded.pdf
header('Content-Disposition: attachment; filename="downloaded.pdf"');
// The PDF source is in original.pdf
readfile('original.pdf');
?>
और पीडीएफ के बजाय PHP फ़ाइल में रीडायरेक्ट (पुनर्लेखन) के लिए पुन: उपयोग करें
http://www.example.com/_PDFs/___download_the_catalogue_instead_opening.phpऔर पीडीएफ फाइल खोलने का प्रयास करें, यह अभी भी ब्राउज़र में मूल नाम खोलता है, बदले हुए संस्करण को डाउनलोड करने के लिए ...
आप उपयोग कर सकते हैं
Response.AddHeader("Content-disposition", "attachment; filename=" + Name);
इस उदाहरण को देखें:
http://www.codeproject.com/KB/aspnet/textfile.aspx
यह ASP.NET के लिए जाता है। मुझे यकीन है कि आप अन्य सभी सर्वर साइड भाषाओं में समान समाधान पा सकते हैं। हालांकि मेरे ज्ञान के सर्वश्रेष्ठ के लिए कोई जावास्क्रिप्ट समाधान नहीं है।
HTML5 विशेषता के बिना php के उपयोग से कोई भी इसे प्राप्त कर सकता है:
इस कोड के साथ download.php नाम की php फाइल बनाएं :
<?php
ob_start();
$file = "yourPDF.pdf"
if (file_exists($file))
{
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit();
}
अब यदि आप स्वचालित रूप से पीडीएफ डाउनलोड करना शुरू करना चाहते हैं तो इस जावास्क्रिप्ट को लिखें:
<script>window.location = "download.php";</script>
यदि आप एक लिंक पर काम करना चाहते हैं, तो इसका उपयोग करें ...
<a href='javascript:window.location = "download.php"'>
Download it!
</a>
$file = $_GET['$file'];। क्योंकि कोई तब download.php?file=../../../wp-config.phpकिसी दिए गए संसाधन को कॉल या कर सकता है । एक्सटेंशन, माइम-प्रकार और अनुमत पथों के लिए अतिरिक्त जाँच (और "../" जैसी सामग्री को अलग करने के लिए) बहुत महत्वपूर्ण हैं!
<a href='download.php'> ?
जब आप किसी भी छवि या पीडीएफ फाइल को नए टैब में खोलने के बजाय ब्राउज़र से डायरेक्ट डाउनलोड करना चाहते हैं तो जावास्क्रिप्ट में आपको डायनामिक लिंक बनाने की विशेषता डाउनलोड करने के लिए मूल्य निर्धारित करना चाहिए
var path= "your file path will be here";
var save = document.createElement('a');
save.href = filePath;
save.download = "Your file name here";
save.target = '_blank';
var event = document.createEvent('Event');
event.initEvent('click', true, true);
save.dispatchEvent(event);
(window.URL || window.webkitURL).revokeObjectURL(save.href);
नए Chrome अपडेट के लिए कुछ समय की घटना काम नहीं कर रही है। उसके लिए निम्नलिखित कोड का उपयोग किया जाएगा
var path= "your file path will be here";
var save = document.createElement('a');
save.href = filePath;
save.download = "Your file name here";
save.target = '_blank';
document.body.appendChild(save);
save.click();
document.body.removeChild(save);
बच्चे को लागू करना और बच्चे को निकालना फ़ायरफ़ॉक्स, इंटरनेट एक्सप्लोरर ब्राउज़र के लिए ही उपयोगी है। क्रोम पर यह बच्चे को जोड़ने और हटाने के बिना काम करेगा
मेरे लिए सबसे अच्छा काम करने वाला समाधान निक ने अपने ब्लॉग पर लिखा था
उनके समाधान का मूल विचार अपाचे सर्वर हेडर मॉड का उपयोग करना है और एक फ़ाइलमेच निर्देश को शामिल करने के लिए .htaccess को संपादित करना है जो सभी * .pdf फ़ाइलों को अटैचमेंट के बजाय स्ट्रीम के रूप में कार्य करने के लिए निर्देशित करता है। हालांकि इसमें वास्तव में HTML संपादन (मूल प्रश्न के अनुसार) शामिल नहीं है, इसके लिए प्रति प्रोग्रामिंग की आवश्यकता नहीं है।
पहला कारण जो मैंने निक के दृष्टिकोण को पसंद किया, क्योंकि इसने मुझे इसे प्रति फ़ोल्डर के आधार पर सेट करने की अनुमति दी, इसलिए पीडीएफ को एक फ़ोल्डर में अभी भी ब्राउज़र में खोला जा सकता है, जबकि अन्य (जिन्हें हम उपयोगकर्ताओं को संपादित करना चाहते हैं और फिर पुनः अपलोड करेंगे) डाउनलोड के रूप में मजबूर होना।
मैं यह भी जोड़ना चाहूंगा कि पीडीएफ के साथ एक विकल्प है कि आप अपने सर्वर पर एपीआई के माध्यम से भरण-योग्य फॉर्म पोस्ट / सबमिट कर सकते हैं, लेकिन इसे लागू करने में कुछ समय लगता है।
दूसरा कारण था क्योंकि समय एक विचार है। हेडर में कंटेंट डिस्पोज़ को मजबूर करने के लिए PHP फ़ाइल हैंडलर लिखना () एपीआई की तुलना में कम समय लेगा, लेकिन निक के दृष्टिकोण से अधिक लंबा।
यदि आप जानते हैं कि अपाचे मॉड को कैसे चालू करें और .htaccs को संपादित करें तो आप इसे लगभग 10 मिनट में प्राप्त कर सकते हैं। इसके लिए लिनक्स होस्टिंग (विंडोज नहीं) की आवश्यकता है। यह सभी उपयोगों के लिए उपयुक्त दृष्टिकोण नहीं हो सकता है क्योंकि इसे कॉन्फ़िगर करने के लिए उच्च स्तरीय सर्वर पहुंच की आवश्यकता होती है। जैसे, यदि आपने कहा है कि यह संभवतः है क्योंकि आप पहले से ही जानते हैं कि उन दो चीजों को कैसे करना है। यदि नहीं, तो अधिक निर्देशों के लिए निक के ब्लॉग की जांच करें।
HTML5 तरीका (मेरा पिछला उत्तर) सभी ब्राउज़रों में उपलब्ध नहीं है, एक और थोड़ा हैक तरीका है।
इस समाधान के लिए आवश्यक है कि आप उसी डोमेन से इच्छित फ़ाइल परोस रहे हों, या उसके पास कोर अनुमति हो।
application/octet-stream। परिणाम जैसा दिखना चाहिएdata:application/octet-stream;base64,SGVsbG8sIFdvcmxkIQ%3D%3D
अब सेट करें location.href = data। यह ब्राउज़र को फ़ाइल डाउनलोड करने का कारण बनेगा। दुर्भाग्य से आप फ़ाइल का नाम या एक्सटेंशन इस तरह सेट नहीं कर सकते। मीडिया-प्रकार के साथ फिडिंग से कुछ मिल सकता है।
विवरण देखें: https://developer.mozilla.org/en-US/docs/Web/HTTP/data_URIs
मुझे एक विशेष फ़ोल्डर में डायनामिक नामों के साथ बनाई गई फ़ाइलों के लिए ऐसा करने की आवश्यकता थी और आईआईएस द्वारा सेवा दी गई थी।
यह मेरे लिए काम किया:
निम्नलिखित जानकारी के साथ एक नया हेडर जोड़ें:
Name: content-disposition
Value: attachment
(from: http://forums.iis.net/t/1175103.aspx?add+CustomHeaders+only+for+earch+file+types+ )
यदि आप एचटीएमएल 5 का उपयोग कर रहे हैं (और मुझे लगता है कि अब हर कोई उस दिन का उपयोग करता है), एक विशेषता कहा जाता है download।
पूर्व।
<a href="somepathto.pdf" download="filename">
यहां filenameवैकल्पिक है, लेकिन अगर प्रदान किया जाता है, तो यह डाउनलोड की गई फ़ाइल के लिए यह नाम लेगा।
<a href="download/Curriculum_it.pdf.zip">Download curriculum</a>या यह: <a href="download/Curriculum_it.pdf.zip" download="Curriculum_it">Download curriculum</a>और मैं यह कैसे काम करता है में कोई अंतर नहीं देख सकता। दोनों मेरे .zip को डाउनलोड कर रहे हैं। और दूसरे में फ़ाइल नाम विकल्प का उपयोग करने से कुछ भी नहीं लगता है।
व्यवहार को इस बात पर निर्भर करना चाहिए कि विभिन्न MIME प्रकारों को संभालने के लिए ब्राउज़र कैसे सेट किया गया है। इस स्थिति में MIME प्रकार एप्लिकेशन / पीडीएफ है। यदि आप ब्राउज़र को उस फ़ाइल को डाउनलोड करने के लिए मजबूर करना चाहते हैं जो आप पीडीएफ फाइलों पर एक अलग MIME प्रकार के लिए मजबूर कर सकते हैं। मैं इसके खिलाफ सलाह देता हूं क्योंकि यह उपयोगकर्ताओं की पसंद होनी चाहिए कि पीडीएफ फाइल खोलने पर क्या होगा।
आप download.js ( https://github.com/rndme/download और http://danml.com/download.html ) का उपयोग कर सकते हैं । यदि फ़ाइल बाहरी URL में है, तो आपको एक अजाक्स अनुरोध करना होगा, लेकिन यदि यह नहीं है, तो आप फ़ंक्शन का उपयोग कर सकते हैं:
download(Path, name, mime)
GitHub में अधिक जानकारी के लिए उनके प्रलेखन पढ़ें।
अंत में मैंने पाया ...... डायनामिक एंकर टैग बनाएं और उस पर क्लिक करें
<script>
$('#myclick').click(function(){
$('body').append('<a id="link" href="mypdf.pdf"
download="Payment.pdf"> </a>');
$('#link')[0].click();
});
</script>
'Payment.pdf' केवल कस्टम नाम के लिए है।