डाउनलोड फ़ाइल jQuery का उपयोग कर


113

जब वे किसी लिंक पर क्लिक करते हैं, तो मैं किसी उपयोगकर्ता के लिए डाउनलोड को कैसे रोक सकता हूं।

उदाहरण के लिए, इसके बजाय:

<a href="uploads/file.doc">Download Here</a>

मैं प्रयोग कर सकता हूँ:

<a href="#">Download Here</a>

 $('a').click... //Some jquery to download the file

इस तरह, Google मेरी HREF और निजी फ़ाइलों को अनुक्रमित नहीं करता है।

यह jQuery के साथ किया जा सकता है, यदि हां, तो कैसे? या यह PHP या इसके बजाय कुछ के साथ किया जाना चाहिए?


जवाबों:


165

मैं इसका उपयोग करते हुए अधिक सुंदर ढंग से अपमानजनक समाधान के रूप में सुझाव दे सकता हूं preventDefault:

$('a').click(function(e) {
    e.preventDefault();  //stop the browser from following
    window.location.href = 'uploads/file.doc';
});

<a href="no-script.html">Download now!</a>

यहां तक ​​कि अगर कोई जावास्क्रिप्ट नहीं है, तो कम से कम इस तरह से उपयोगकर्ता को कुछ प्रतिक्रिया मिलेगी।


20
jQuery है जवाब।
एस्टेबन कुबेर

धन्यवाद, यह वही है जिसकी मुझे तलाश थी। मैं आमतौर पर "preventDefault" का उपयोग करता हूं, बस इसे ऊपर छोड़ दिया क्योंकि मैं आलसी हो रहा था। ;-)
डोडिनास

2
महान काम करता है, लेकिन कुछ MIME टाइप त्रुटियां प्राप्त करता है। जिज्ञासु अगर उन्हें अतीत में लाने के लिए कोई रास्ता है?
नाथन हैंगन

2
क्या आपने MIME प्रकार की चेतावनी को हल किया था? मुझे "संसाधन को दस्तावेज़ के रूप में व्याख्या किया गया लेकिन MIME प्रकार के साथ स्थानांतरित किया गया ..." बहुत धन्यवाद।
user1824269

22

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

यदि आप केवल जावास्क्रिप्ट पर निर्भर हैं, तो कुछ उपयोगकर्ता जो इसके बिना ब्राउज़ करते हैं, वे आपके लिंक पर क्लिक नहीं कर पाएंगे।


1
'Robots.txt' के बारे में जानकर अच्छा लगा। धन्यवाद।
डोडिनास

@Rob, यदि आपको "निजी" होने के लिए URL की आवश्यकता है, robots.txtतो मदद नहीं करेगा क्योंकि यह अभी भी ब्राउज़र इतिहास और मध्यस्थ सर्वर में संग्रहीत किया जाएगा।
पचेरियर

3
6 साल बाद: जावास्क्रिप्ट के बिना ब्राउज़िंग? - ठीक है, आप इसके बजाय टहलने भी जा सकते हैं।
low_rents

लगभग 10 साल बाद: वही! या?
toing_toing

18

यहाँ एक अच्छा लेख है जो खोज इंजन से फाइलों को छिपाने के कई तरीके दिखाता है:

http://antezeta.com/news/avoid-search-engine-indexing

जावास्क्रिप्ट एक पेज को इंडेक्स नहीं करने का एक अच्छा तरीका नहीं है; यह उपयोगकर्ताओं को आपकी फ़ाइलों से सीधे लिंक करने से नहीं रोकेगा (और इस प्रकार इसे क्रॉलर को प्रकट करता है), और जैसा कि रोब ने उल्लेख किया है, सभी उपयोगकर्ताओं के लिए काम नहीं करेगा।
एक आसान फिक्स rel="nofollow"विशेषता जोड़ना है , हालांकि फिर से, यह robots.txt के बिना पूरा नहीं होता है।

<a href="uploads/file.doc" rel="nofollow">Download Here</a>

2
यहाँ वेबमास्टर्स के लिए Google हेल्प का एक और आर्टिकल है जो मुझे "nofollow" या "me" rel समझने में बहुत मदद करता है।
000

12

हां, आपको उस फ़ाइल के url में window.location.href बदलना होगा जिसे आप डाउनलोड करना चाहते हैं।

window.location.href = 'http://www.com/path/to/file';

क्या होगा अगर फ़ाइल एक्सटेंशन .html है, डाउनलोड के बजाय यह उस html फ़ाइल पर रीडायरेक्ट करेगा
कलीम नालबंद

9
 var link=document.createElement('a');
 document.body.appendChild(link);
 link.href=url;
 link.click();

कोई त्रुटि नहीं, बस डाउनलोड शुरू नहीं हो रहा था। मुझे लगता है कि तत्व बनाते समय शायद कुछ बिंदु im गायब हैं।
shyammakwana.me

अपने HTML में सत्यापित करें कि क्या कोई तत्व <a> बनाया गया था या नहीं और आपकी फ़ाइल लिंक को सत्यापित करें।
एलए मिसौई हबीब

एक टैग था, बॉडी में। और मैन्युअल क्लिक करके यह छवि डाउनलोड कर रहा है। हालाँकि अब इसकी आवश्यकता नहीं है, मैंने इस वेनिलाजेएस समाधान का उपयोग किया।
shyammakwana.me

काम नहीं करने के लिए कोई कारण नहीं हैं लिंक सही हैं। ब्राउज़ में लिंक प्रत्यक्ष का परीक्षण करें
ईएल मिसाऊ हबीब

$('blah').each(function(){ $('body').append('<a href="'+xxx+'" download="'+dynamicname+'" />'); }) $('a').trigger('click');मैंने उसका इस्तेमाल किया
shyammakwana.me


6

बताते हुए window.location.href = 'uploads/file.doc';आपको आप अपनी फ़ाइलों को कहाँ संग्रहीत करते हैं। आप निश्चित रूप से संग्रहीत फ़ाइलों के लिए आवश्यक व्यवहार के लिए .htacess का उपयोग कर सकते हैं, लेकिन यह हमेशा मुट्ठी भर नहीं हो सकता है ...।

सर्वर साइड php-file बनाना और इस सामग्री को उसमें रखना बेहतर है:

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.$_REQUEST['f']);
readfile('../some_folder/some_subfolder/'.$_REQUEST['f']); 
exit;

यह कोड किसी भी फ़ाइल को डाउनलोड के रूप में दिखाएगा कि आप वास्तव में उसे कहां स्टोर करते हैं।

आप के माध्यम से इस php फ़ाइल खोलें window.location.href = 'scripts/this_php_file.php?f=downloaded_file';


इस समाधान ने मुझे मेरी साइट पर डाउनलोड के मुद्दों को ठीक करने में मदद की, धन्यवाद!
डेनिज़


3

मेरा सुझाव है कि आप मूसडाउन ईवेंट का उपयोग करें, जिसे क्लिक इवेंट कहा जाता है। इस तरह, ब्राउज़र क्लिक इवेंट को स्वाभाविक रूप से संभालता है, जो किसी भी कोड विचित्रता से बचता है:

(function ($) {


    // with this solution, the browser handles the download link naturally (tested in chrome and firefox)
    $(document).ready(function () {

        var url = '/private/downloads/myfile123.pdf';
        $("a").on('mousedown', function () {
            $(this).attr("href", url);
        });

    });
})(jQuery);

0

स्पष्ट रूपों के लिए jQuery का उपयोग करने पर इसी तरह की पोस्ट के लिए यहां देखें: jQuery के साथ एक बहु-मंच फ़ॉर्म को रीसेट करना

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.