Как отправить файл через Websocket вместе с дополнительной информацией? - PullRequest
0 голосов
/ 13 мая 2018

Я разрабатываю веб-приложение для отправки изображений, видео и т. Д. На два монитора из интерфейса администратора. Я использую ws в Node.js для серверной части. Я реализовал выбор изображений, доступных на сервере и внешних URL-адресов, и отправку их клиентам, но я также хотел иметь возможность напрямую отправлять изображения, выбранные с устройства, с помощью ввода файлов. Мне удалось сделать это с помощью base64, но я думаю, что это довольно неэффективно.

В настоящее время я отправляю строковый объект JSON, содержащий клиента, которому должен быть отправлен ресурс, тип ресурса и сам ресурс, анализирую его на сервере и отправляю соответствующему клиенту. Я знаю, что могу установить двоичный тип Websocket на blob и просто отправить объект File, но тогда у меня не будет возможности сообщить серверу, на какой клиент он должен его отправить. Я пытался использовать typeson и BSON для достижения этой цели, но это не сработало.

Есть ли другие способы сделать это?

1 Ответ

0 голосов
/ 14 мая 2018

Вы можете отправлять необработанные двоичные данные через WebSocket.

Управлять им довольно просто.

Один из вариантов - добавить волшебный байт (идентификатор, который помечает сообщение как не-JSON).Например, добавьте двоичные сообщения с символом B.

Все, что нужно сделать серверу, это проверить первый символ перед сбором двоичных данных (если магический байт отсутствует, это, вероятно, обычный JSONсообщение).

Более серьезная реализация прикрепит заголовок после магического байта (т. е. имя файла, общая длина, позиция отправляемых данных и т. д.).

Это позволяет загружать ввозобновить после отключения (отправьте только те части, которые не были подтверждены как полученные.

Вашему серверу перед обработкой потребуется разбить данные на magic byte, header и binary_data. Но это достаточно простовыполнить.

...