2013-07-30 3 views
2

채널 api를 통해 캔버스 요소에서 다른 클라이언트로 가져온 이미지의 데이터 URI를 보내려고합니다.google 앱 엔진 채널 api를 통해 데이터 uri 보내기

및 SendMessage() 함수는 그냥 일반 텍스트를 전송하지만 난 것 같다 못할 때 잘 작동

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" 응용 프로그램 엔진 로그에서 :

내 자바 스크립트입니다 데이터 URI를 보낼 수 있습니다.

위에서 본 것처럼 sendPictData() 메서드 내에서 url을 인코딩하려고했지만이 방법이 도움이되지 않습니다.

당신이 줄 수있는 도움을 주시면 감사하겠습니다.

업데이트 - 파이썬 처리기 코드 및 로그 출력 :이 로그의 출력이

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

이것은 자바 스크립트입니다./lessonarea/message의 핸들러로 보내고 있습니다. 해당 처리기에 오류가 기록 된 것을보고 계십니까? 대부분의 경우 오류는 데이터를 파싱하는 핸들러 코드에 있으므로 코드를 표시하면 도움이됩니다. – dragonx

+0

템플릿이 렌더링 될 때 '키'토큰과 '토큰'이 대체됩니까? – Tombatron

+0

@Tombatron 예 템플릿이 렌더링 될 때 'key'와 'me'토큰이 교체됩니다. –

답변

1

내 의견에 드래곤 - 간단한 감독의 의견에서 답변이 발견되었습니다.

채널 메시지가 32KB 제한을 초과했습니다. 이미지의 크기가 바뀌었고 코드가 잘 작동했습니다.