Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Передать файл в браузер


Автор: onikys 8.3.2012, 11:47
Суть проблемы такая:
Запрос идет через ajax, на сервере происходит действие и в ответе передается уже готовый файл с нужными заголовками:
Content-type: application/vnd.ms-excel
Content-Disposition attachment; filename="report.xls"

Как мне вывести окно "сохранить как", чтобы его можно было сохранить на компьютер?

Пока у меня одна идея - это сгенерировать файл на сервере и во фрейме передать ссылкой, но может есть и другой способ о котором я не знаю?

Автор: onikys 9.3.2012, 23:00
актуально!

Автор: ksnk 9.3.2012, 23:30
Нужно иметь невидимый iframe
Код

<iframe name="xxx" id="xxx" style="display:none" src="javascript:void(0)"></iframe>


форма с таргетом xxx
Код

<form target="xxx" method='post' action='load.php'>
...
</form> 

В этой форме и должен быть тот элемент управления, который вызовет загрузку файла.

load.php должен выдавать файл с заголовками. Заголовки лучше использовать такие:
Код

header('Content-Type: application/octet-stream');
header('Connection: keep-alive'); // so it's possible to skip filesize header
header('Content-Disposition: attachment; filename="report.xls";');

application/octet-stream, видимо, самое важное.
Если возможно определить размер файла, нужно указать заголовок content-size, если невозможно - оставить так.

Как сделать загрузку чистым ajax(xmlHttpRequest) - не знаю, но подозреваю, что никак ;)


Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)