Как обслуживать или принудительно загружать файлы из другого каталога в метеоре в клиентский браузер
Пользователь заходит на мой сайт и что-то вводит, а мой сайт генерирует файл в качестве вывода.
К сожалению, я не могу поместить сгенерированный файл в общедоступный каталог - как вы все сейчас, Метеор наблюдает за этим и перезапускается каждый раз, когда изменяется содержимое публичной папки.
поэтому мои сгенерированные файлы живут в.meteor / local / build / Programs / Server / Files
так, например, у меня есть document.pdf, который находится в этом каталоге, я хотел бы подать / принудительно / инициировать загрузку файла в браузер моего клиента, который позволяет его браузеру загрузить этот файл document.pdf.
2 ответа
В общем, это не очень хорошая идея, чтобы сделать это. Это очень затрудняет масштабирование вашего приложения. Узел также не подходит для обслуживания больших статических файлов.
Кроме того, если у вас есть два сервера, есть небольшая вероятность того, что данные другого будут запрошены (например, если вы используете менеджер загрузок).
Я не уверен, но я думаю, что перезагрузка живого кода Meteor не работает / отключается в рабочем режиме (при использовании meteor deploy
или же meteor bundle
)
Лучше всего загрузить ваш файл на S3, а затем перенаправить пользователя к файлу.
Вы также можете использовать Iron Router и серверные маршруты для создания динамической загрузки файла. См. Документацию на стороне сервера Iron Router. Затем вы устанавливаете тип контента на application/pdf и отправляете файл обратно напрямую, не сохраняя его в файловой системе. Если вам нужно, вы также можете сохранить его в другой папке и подать его самостоятельно.
Затем взгляните на этот ответ для примера чтения и потоковой передачи файла: загрузка файла JS узла с использованием потока.
Поскольку это маршрут на стороне сервера, использующий Express и Iron Router, вам не нужно связываться с какими-либо проблемами асинхронизации, связанными с волокнами.