Запись PDF-файлов из веб-приложения на USB-флешку
Я обеспокоен осуществимостью этого: на предварительно сконфигурированной машине у меня будет предварительно установлено веб-приложение, рядом с Apache-Suite. Так что клиент и сервер одинаковы!
В этом веб-приложении пользователи могут перетаскивать PDF-файлы на USB-значок.
Затем веб-приложение должно записать брошенный PDF-файл на подключенную USB-карту.
Я никогда не делал что-то подобное (запись на USB), поэтому я довольно неуверен в себе. И я хорошо знаю об ограничениях браузера, касающихся JavaScript и Файловой системы-Access, но...
после небольшого исследования я обнаружил, что могут быть некоторые
соответствующие (я веб-платформа-парень) решения для этого:
- Сделайте "Chrome App" с USB-разрешением (это действительно работает?)
- Используйте PHP, чтобы найти USB, а затем записать на него (как это будет работать под Windows?)
- Использовать Flash в качестве посредника (не рекомендуется)
Теперь я хотел бы знать:
- Кто-нибудь имеет хороший опыт с ранее упомянутыми возможностями?
- Кто-нибудь когда-нибудь делал что-то подобное? Это сработало? Какой путь вы выбрали?
- Как я узнаю, на каком диске USB-накопитель установлен, и как я могу в этом убедиться?
- Какие другие возможные решения этой проблемы есть?
3 ответа
У вас есть веб-сайт (пользовательский интерфейс на стороне клиента) и внутренний сервер (на стороне сервера), работающий на одном компьютере. Это дает вам 2 варианта:
- На стороне клиента: загрузите файл через браузер через HTTP GET и дайте пользователю выбрать, где он его сохранит.
- На стороне сервера: встроите свои взаимодействия с USB в внутренний код (Node.js), как рекомендует @mcgraphix.
Взаимодействие с USB на стороне сервера обеспечивает наибольшую гибкость. Кроме того, есть ряд библиотек, которые вы можете использовать. Перейдите на http://npmjs.org/ и рассмотрите, среди прочего, следующие серверные пакеты Node.js:
При подходе на стороне сервера инициируйте запрос веб-службы, когда пользователь завершит действие перетаскивания на клиенте, и реализуйте USB-взаимодействие в рамках метода сервера (Express.js или аналогичного), который обслуживает запрос.
Если буква флешки известна, тогда написание файла из PHP будет простым
file_put_contents( 'E:\\folder\\file.pdf', $data );
Обновить
Вы можете прочитать список дисков в раскрывающемся списке и позволить пользователю выбрать диск по умолчанию для записи в
/questions/41333722/kak-poluchit-sistemnyie-diski-cherez-php/41333729#41333729
Ваш вопрос - больше вопрос архитектуры, чем вопрос, специфичный для кода.
Ваше веб-приложение (если вы настаиваете на веб-приложении) должно иметь два основных компонента: компонент на стороне сервера, которому можно давать произвольные команды, и компонент на стороне клиента (javascript, использующий XMLHttpRequest), который может отправлять запросы на выполнение компонента на стороне сервера. сказал произвольные команды.
Таким образом, ваш серверный компонент, компонент, который обслуживает вашу веб-страницу, должен иметь некоторый серверный код, который может записывать ваш pdf в файловую систему, он, вероятно, должен также генерировать pdf-файл, а не делать это в веб-браузере.
Какие технологии вы используете, зависит от вас, будь то PHP, .Net, Node.js и т. Д.
Суть в том, что вам нужна серверная структура, которая обрабатывает HTTP-запросы, в вашем случае, вероятно, почтовый запрос от клиентской стороны, содержащий закодированный pdf, и соответствующий ответ. Привязать определенный маршрут http, чтобы активировать логику сохранения.
Ваш http- запрос к серверу будет содержать вашу полезную нагрузку, которая представляет собой файл pdf по определенному пути, например, http://localhost/savepdf который использует любой технологический стек http (вам необходимо это настроить)
Ваш серверный компонент должен прочитать входящие данные, декодировать их соответствующим образом, а затем сделать запрос файловой системы, чтобы записать полученные данные на диск.