Загрузить файл с помощью 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 или чем-то вместо этого?

Ответ 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, по крайней мере таким образом пользователь получит некоторую обратную связь.

Ответ 2

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

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

Ответ 3

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

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

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

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

Ответ 4

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

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

Ответ 5

Указывая 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';

Ответ 6

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

Ответ 8

Я предлагаю вам использовать событие mousedown, которое называется ПЕРЕД событием клика. Таким образом, браузер обрабатывает событие щелчка естественным образом, что позволяет избежать любой странности кода:

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

Ответ 9

См. здесь для аналогичного сообщения об использовании jQuery для очистки форм: Сброс многоступенчатой ​​формы с помощью jQuery

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

Ответ 10

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

        var valFileDownloadPath = 'http//:'+'your url';
    
       window.open(valFileDownloadPath , '_blank');