Tornado write_message не отправляет dict / json - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь отправить файл через веб-сокет торнадо, как это

in_file = open("/home/rootkit/Pictures/test.png", "rb")  
data = in_file.read()
in_file.close()
d = {'file': base64.b64encode(data), 'filename': 'test.png'}
self.ws.write_message(message=d)

в соответствии с документацией торнадо.

Сообщение может быть либо строкой, либо символом (который будет закодирован как json).Если двоичный аргумент равен false, сообщение будет отправлено как utf8;в двоичном режиме разрешена любая байтовая строка.

Но я получаю это исключение.

ERROR:asyncio:Future exception was never retrieved
future: <Future finished exception=TypeError("Expected bytes, unicode, or None; got <class 'dict'>",)>
Traceback (most recent call last):
  File "/home/rootkit/.local/lib/python3.5/site-packages/tornado/gen.py", line 1147, in run
    yielded = self.gen.send(value)
  File "/home/rootkit/PycharmProjects/socketserver/WebSocketClient.py", line 42, in run
    self.ws.write_message(message=d, binary=True)
  File "/home/rootkit/.local/lib/python3.5/site-packages/tornado/websocket.py", line 1213, in write_message
    return self.protocol.write_message(message, binary=binary)
  File "/home/rootkit/.local/lib/python3.5/site-packages/tornado/websocket.py", line 854, in write_message
    message = tornado.escape.utf8(message)
  File "/home/rootkit/.local/lib/python3.5/site-packages/tornado/escape.py", line 197, in utf8
    "Expected bytes, unicode, or None; got %r" % type(value)
TypeError: Expected bytes, unicode, or None; got <class 'dict'>

1 Ответ

0 голосов
/ 27 ноября 2018

Документация, на которую вы ссылаетесь, предназначена для WebSocketHandler, которая предназначена для обслуживания соединения через веб-сокет.

В то время как вы используете клиент веб-сокета .Вам придется вручную конвертировать ваш словарь в JSON.

from tornado.escape import json_encode

self.ws.write_message(message=json_encode(d))
...