Загрузить файл с помощью 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();
Ответ 7
Скрытые фреймы могут помочь
Ответ 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');