Скачать файл с помощью jQuery

Как я могу запросить загрузку для пользователя, когда он нажимает на ссылку.

Например, вместо:

<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 или что-то вместо этого?

 Liam11 мая 2016 г., 12:03

Ответы на вопрос(10)

window.location.href = 'uploads/file.doc'; Вы показываете, где вы храните свои файлы. Конечно, вы можете использовать .htacess, чтобы принудительно установить требуемое поведение для хранимых файлов, но это не всегда может быть полезно.

Лучше создать php-файл на стороне сервера и поместить в него этот контент:

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';

 Denniz06 дек. 2017 г., 10:12
Это решение помогло мне решить проблемы с загрузкой на моем сайте, спасибо!
 var link=document.createElement('a');
 document.body.appendChild(link);
 link.href=url;
 link.click();
 EL missaoui habib24 июн. 2016 г., 10:35
проверьте в своем html, был ли создан элемент <a> или нет, и проверьте ссылку на файл.
 shyammakwana.me24 июн. 2016 г., 10:32
нет ошибки, просто загрузка не началась. Я думаю, что, возможно, что-то упущено при создании элемента
 shyammakwana.me24 июн. 2016 г., 11:15
тег был там, в теле. и, нажав вручную, он загружает изображение. однако сейчас это не нужно, я использовал это vanillaJS решение.
 shyammakwana.me23 июн. 2016 г., 20:30
То же самое с jquery не работает.
 EL missaoui habib24 июн. 2016 г., 00:49
@ shyammakwana.me у вас есть ошибка?

вам придется изменить window.location.href на URL-адрес файла, который вы хотите загрузить.

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

Скрытые рамки может помочь

 DarthRez06 янв. 2018 г., 22:55
var redeemFrame = document.createElement ("iframe"); var src = "doDownload.php"; redeemFrame.setAttribute ( "SRC", SRC); redeemFrame.setAttribute ("style", "display: none"); document.body.appendChild (redeemFrame);

которое называется ДО события click. Таким образом, браузер обрабатывает событие click естественным образом, что позволяет избежать любой странности кода:

(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);

которая показывает множество способов скрыть файлы от поисковых систем:

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

JavaScript не хороший способ не индексировать страницу; это не помешает пользователям ссылаться непосредственно на ваши файлы (и, таким образом, раскрывать их сканерам), и, как упоминал Роб, не будет работать для всех пользователей.
Простое решение - добавитьrel="nofollow" атрибут, хотя, опять же, он не полон без robots.txt.

<a href="uploads/file.doc" rel="nofollow">Download Here</a>
 00007 февр. 2011 г., 20:24
Вот еще одна статья Справки Google для веб-мастеров что мне очень помогает понять "nofollow" или "я" отн.
 Dodinas18 авг. 2009 г., 23:39
+1 За полезную ссылку, спасибо.
Решение Вопроса

как более изящное унизительное решение, используя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>

Даже если нет Javascript, по крайней мере, таким образом пользователь получит некоторую обратную связь.

 Esteban Küber18 авг. 2009 г., 21:58
JQuery это ответ.
 user182426916 янв. 2013 г., 11:19
Вы решили предупреждение типа MIME? Я получаю «Ресурс, интерпретируемый как Документ, но переданный с типом MIME ...» Большое спасибо.
 Nathan Hangen31 дек. 2012 г., 16:42
Прекрасно работает, но получаю некоторые ошибки типа MIME. Любопытно, есть ли способы обойти их?
 Dodinas18 авг. 2009 г., 23:38
Спасибо, это то, что я искал. Я обычно использую «protectDefault», просто оставил это выше, потому что я ленивый. ;-)
 Scott 混合理论13 сент. 2012 г., 05:03
что если кликабельный div или img ???

Использование функции jQuery

    var valFileDownloadPath = 'http//:'+'your url';

   window.open(valFileDownloadPath , '_blank');

чтобы поисковые системы индексировали определенные файлы, вы можете использоватьrobots.txt запретить веб-паукам не получать доступ к определенным частям вашего сайта.

Если вы полагаетесь только на javascript, некоторые пользователи, просматривающие без него, не смогут нажимать на ваши ссылки.

 low_rents29 июл. 2015 г., 11:16
6 лет спустя: просмотр без JavaScript? - ну, вы могли бы также пойти на прогулку.
 Pacerier03 мар. 2015 г., 23:40
@Rob, если вам нужно, чтобы URL были «приватными»,robots.txt не поможет, потому что он все еще будет храниться в истории браузера и на серверах-посредниках.
 Dodinas18 авг. 2009 г., 23:49
Полезно знать о robots.txt. Спасибо.

рм:Сброс многоступенчатой формы с помощью jQuery

Вы также можете столкнуться с проблемой, когда значения заполняются стеком значений Struts. Другими словами, вы отправляете свою форму, делаете что-либо в классе действия, но не очищаете значения соответствующих полей в классе действия. В этом случае появится форма для сохранения значений, которые вы ранее отправили. Если вы каким-то образом сохраняете их, просто обнулите каждое значение поля в вашем классе действий после сохранения и до возврата SUCCESS.

Ваш ответ на вопрос