Скачать файл с помощью 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 или что-то вместо?
10 ответов:
я мог бы предложить это, как более корректно снизить раствором, используя
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, по крайней мере, таким образом пользователь получит некоторую обратную связь.
Если вы не хотите, чтобы поисковые системы индексировали определенные файлы, вы можете использовать роботы.txt чтобы сказать веб-паукам не получать доступ к определенным частям вашего сайта.
Если вы полагаетесь только на JavaScript, то некоторые пользователи, которые просматривают без него не сможете переходить по ссылкам.
вот хорошая статья, которая показывает много способов скрытия файлов из поисковых систем:
JavaScript не является хорошим способом не индексировать страницу; это не помешает пользователям напрямую связываться с вашими файлами (и, таким образом, раскрывать их искателям), и, как упоминал Роб, не будет работать для всех пользователей.
Легко исправить, чтобы добавить
да, вам придется менять окна.местоположение.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';
скрытый iframes может поможет
Я предлагаю вам использовать событие 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);
С помощью функции jQuery
var valFileDownloadPath = 'http//:'+'your url'; window.open(valFileDownloadPath , '_blank');
см. здесь аналогичный пост об использовании jQuery для очистки форм: сброс многоступенчатой формы с помощью jQuery
вы также можете столкнуться с проблемой, когда значения повторно заполняются стеком значений struts. Другими словами, вы отправляете свою форму, делаете все, что в классе действий, но не очищаете связанные значения полей в классе действий. В этом случае форма будет отображаться для поддержания значений, которые вы ранее отправили. Если вы настаиваете на этом в некотором смысле, просто null каждое значение поля в вашем классе действий после сохранения и до возвращения успеха.
Comments