Вы не можете (не можете) передавать данные непосредственно на диск пользователя или взаимодействовать вне браузера пользователя.В веб-приложении все, что вам нужно сделать, это доставить контент пользователю в виде стандартного HTTP-ответа.Об остальном позаботится браузер пользователя.
Есть действительно хороший вопрос / ответ по этому поводу здесь .
Поймите, что протокол HTTP не работает "файлы «.Он имеет дело с запросами и ответами, каждый из которых состоит из заголовков и тела.Итак, что бы ваше веб-приложение делало, создавало ответ, который браузер пользователя мог бы интерпретировать как нечто, что он должен сохранять в виде файла.Заголовки предоставят браузеру то, что нужно для этой интерпретации, а тело предоставит браузеру данные.Обычно он включает в себя следующие шаги:
- Удалите все существующие выходные данные (не отправляйте разметку страницы или что-либо подобное).
- Установите соответствующие заголовки .В этом случае вы захотите установить такие вещи, как
content-length
, content-type
и, вероятно, content-disposition
, чтобы предложить браузеру сохранить ответ в виде файла. - Записать байтыфайла в поток ответов.
- Завершение потока ответов.