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

13 ответов

Решение

Я мог бы предложить это, как более изящное унизительное решение, используя 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, по крайней мере, таким образом, пользователь получит некоторую обратную связь.

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

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

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

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

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

<a href="uploads/file.doc" rel="nofollow">Download Here</a>
 var link=document.createElement('a');
 document.body.appendChild(link);
 link.href=url;
 link.click();
  • Использование функции jQuery

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

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

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

Заявив 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';

Скрытые фреймы могут помочь

Я предлагаю вам использовать событие mousedown, которое называется ДО события 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);

Вы можете сделать это с помощью html5 очень легко:

      var link = document.createElement('a');
link.href = "/WWW/test.pdf";
link.download = "file_" + new Date() + ".pdf";
link.click();
link.remove();

Скопировать это

      var link = document.createElement('a');
document.body.appendChild(link);
link.setAttribute('download', '');
link.href = URL_HERE;
link.click();
link.remove();

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

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

Если кто-то столкнется с этим вопросом, ищет способ, например, принудительно загрузить изображение. Для этого вы можете использовать атрибут загрузки в теге <a>.

      <a href="/images/myw3schoolsimage.jpg" download>
Другие вопросы по тегам