2013-07-30 3 views
2

Я пытаюсь отправить uri данных изображения, которое было взято из элемента canvas другому клиенту через канал api.Передача данных uri с помощью канала движка Google api

Это мой JavaScript:

var pictData = imageCanvas.toDataURL("image/png"); 
sendPictData(pictData); 

function sendPictData(pictData){ 
    dataToSend = encodeURIComponent(pictData); 
    sendMessage({type: 'blackboardBackground', 
       image: dataToSend 
       }); 
} 

function sendMessage(message){ 
    var msgString = JSON.stringify(message); 
    path = '/lessonarea/message?r={{ key }}' + '&u={{ me }}'; 
    var xhr = new XMLHttpRequest(); 
    xhr.open('POST', path, true); 
    xhr.send(msgString); 

} 

Я получаю ошибку «InvalidMessageError» из журнала приложение двигателя

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

Как видно выше, я попытался кодировать URL-адрес метода sendPictData(), но это, похоже, не помогает.

Цените любую помощь, которую вы можете дать.

Update - код обработчика Python и войти выход:

class MessagePage(webapp2.RequestHandler): 
    def post(self): 
     message = self.request.body 
     lessonRoomKey = self.request.get('r') 
     user = self.request.get('u') 
     with LOCK: 
      lesson_room = LessonRoom.get_by_id(lessonRoomKey) 
      if lesson_room: 
       self.handle_message(lesson_room, user, message) 

     else: 
      logging.warning('Unknown Lesson room ' + lessonRoomKey) 

    def handle_message(self, lessonRoom, user, message): 
     message_obj = json.loads(message) 
     logging.info("Message type = " + message_obj['type']) 
     other_user = lessonRoom.get_other_user(user) 
     lessonRoomKey = lessonRoom.key.id(); 
     if other_user and lessonRoom.has_user(other_user): 
      on_message(lessonRoom, other_user, message) 

    def on_message(self, room, user, message): 
     client_id = make_client_id(room, user) 
     if room.is_connected(user): 
      channel.send_message(client_id, message) 

Это выход из журнала:

INFO  2013-07-30 21:39:22,582 lessonarea.py:364] Message type = blackboardBackground 
ERROR 2013-07-30 21:39:22,583 webapp2.py:1553] 
Traceback (most recent call last): 
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1536, in __call__ 
    rv = self.handle_exception(request, response, e) 
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1530, in __call__ 
    rv = self.router.dispatch(request, response) 
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1278, in default_dispatcher 
    return route.handler_adapter(request, response) 
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 1102, in __call__ 
    return handler.dispatch() 
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 572, in dispatch 
    return self.handle_exception(e, self.app.debug) 
File "/home/alec/google_projects/google_appengine/lib/webapp2/webapp2.py", line 570, in dispatch 
    return method(*args, **kwargs) 
File "/home/alec/google_projects/src/lessonarea.py", line 357, in post 
    self.handle_message(lesson_room, user, message) 
File "/home/alec/google_projects/src/lessonarea.py", line 385, in handle_message 
    on_message(lessonRoom, other_user, message) 
File "/home/alec/google_projects/src/lessonarea.py", line 168, in on_message 
    channel.send_message(client_id, message) 
File "/home/alec/google_projects/google_appengine/google/appengine/api/channel/channel.py", line 209, in send_message 
    raise InvalidMessageError 
InvalidMessageError 

Как уже упоминалось выше, я считаю, что обработчик будет корректно работать в нем отлично работает при отправке простого текстового сообщения.

+0

Это ваш Javascript. Вы отправляете обработчик в/lessonarea/message. Вы видите ошибку, зарегистрированную в этом обработчике? Скорее всего, ошибка в коде обработчика, который анализирует данные, поэтому это поможет, если вы продемонстрируете этот код. – dragonx

+0

Значит, заменяются ли теги «ключ» и «я» при визуализации шаблона? – Tombatron

+0

@Tombatron да токены 'key' и 'me' заменяются при визуализации шаблона –

ответ

1

Ответ был обнаружен в комментариях dragonx - простой надзор с моей стороны.

Сообщение канала превысило предел в 32 kb. Изменен размер изображений, и код работал нормально.

Смежные вопросы