Принудительная загрузка через js или запрос

Можно ли принудительно загрузить через JS или Javascript, т.е. веб-страница не должна открывать файл на новой вкладке в браузере, но всплывать, чтобы пользователь мог выбрать eith "сохранить как" или открыть с помощью???

Ответы

Ответ 1

Вы не можете заставить это поведение JavaScript, HTTP-заголовки должны быть установлены на стороне сервера:

Content-disposition=attachment; filename=some.file.name

Способ решения проблемы - позволить вашему AJAX-методу перенаправить пользователя на URL-адрес PDF файла:

location.replace('path/to.pdf');

(Указанные выше HTTP-заголовки должны быть установлены для PDF файла)

Ответ 2

С появлением HTML5 вы можете просто использовать новую загрузку свойств в теге привязки.

Код будет выглядеть примерно так:

<a download="name_of_downloaded_file" href="path/to/the/download/file"> Clicking on this link will force download the file</a>

Он работает с последней версией Firefox и Chrome. Должен ли я упоминать, что я не проверял его в IE?: P

Отредактирован атрибут загрузки после комментария sstur

Ответ 3

динамическое создание ссылки и щелкните ее с атрибутом загрузки для загрузки силы как файл:

var anchor = document.createElement('a');
anchor.href = this.props.download_url;
anchor.target = '_blank';
anchor.download = this.props.file_name;
anchor.click();

Обратите внимание, что я даже не добавил его в DOM, поэтому он быстро.

Атрибут

P.S download не будет работать с IE. Но он просто откроет ссылку на новой вкладке. http://caniuse.com/#feat=download

Ответ 4

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

Как отметил @Paul D. White в разделе комментариев, если вы хотите открыть файл inline (внутри браузера) с помощью связанной с ним программы по умолчанию, вы можете отправить сервер HTTP-заголовку Content-Disposition. Например:

Content-Disposition: inline; filename=foo.pdf

Ответ 5

Нет, это невозможно с JQuery/JavaScript.

Вам понадобится серверная сторона script, которая вернет вам файл с Content-Type (HTTP Header), который заставит браузер загружать запрошенный файл. Возможным значением для Content-Type будет application/force-download.