@Jintsuu

Как передать файл с сервера node js на клиентскую сторону?

На сервер я передаю то, что пользователь напечатал в редакторе кода, после упаковываю всё это в файл, и тут вопрос, как мне этот файл передать обратно на клиентскую часть чтобы потом пользователь мог скачать этот файл?
  • Вопрос задан
  • 1623 просмотра
Пригласить эксперта
Ответы на вопрос 3
alekstar79
@alekstar79
Ты хочешь чтобы пользователь нажал на кнопку и у него началась скачка файла? Передавать не файл нужно, в таком случае, а заголовки, инициализирующие процесс.
Ответ написан
Комментировать
mak_ufo
@mak_ufo
Как я понял, вам не надо передавать файл. Сохраняйте набранный текст в файл и отдавайте пользователю ссылку на его скачивание
Ответ написан
@yarkin
Описание довольно общее дано у Вас.
Со стороны сервера:
1) Обработка данных занимает малое время и ответ ожидается в том же соединении? Если результурующий файл находится в памяти процесса, то тут проще некуда - записать данные в качестве ответа, выставив нужные заголовки ( Content-Type, Content-Length, Content-Disposition, если требуется). Если на диске, то либо читаем и делаем как в предыдущем предложении, либо отправляем ссылку на файл и следующим запросом с клиента его скачиваем. Также, если есть nginx перед нодой (другие веб-серверы тоже такое поддерживают), то можно воспользоваться штукой под названием X-Sendfile (чтобы не грузить ноду для отдачи контента с диска).
2) Если обработка занимает долгое время, то обычно клеинту сразу отвечают с каким-нибудь уникальным идентификатором запроса, по которому он периодически проверяет готовность (если нет других каналов для эффективной обратной связи) и получает ссылку на скачивание (которая далее обрабатывается либо nginx, либо тем же express-static).

Со стороны клиента:
1) Если запрос идёт через XHR, то, на сколько я помню, нужно использовать некоторые костыли, чтобы браузер показал клиенту диалог сохранения файла (гугл в помощь тут).
2) Если стандартная отправка формы и сервер сразу отвечает файлом, то тут вообще ничего делать не надо (возможно потребуется заголовок Content-Disposition, иначе браузер может отобразить файл, если он умеет читать такой формат сам, плюс чтобы задать адекватное имя файлу).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы