2016-05-26 18 views
1

私は、MySqlのblob型フィールドに格納されている写真を取得するGETメソッドの次のコードを持っています。私は、anglejsアプリケーションで画像を表示できるタイプのJSON文字列の中のクライアントに返したいと思っています。MySQLのblobコンテンツをjsonレスポンスとして送信

def GET(self,r): 
    user_data = CC.get_data(query) # holds the content of the blob field. 
    print type(user_data) # prints <type 'str'> 
    data = {'name': 'test', 
      'photo': user_data} 
    return json.dump(data) 

これは、私がバイト配列として写真として送信するためにいくつかのウェブサイトでは、その優れたを発見した

UnicodeDecodeError: 'utf8' codec can't decode byte 0x89 in position 0: 
    invalid start byte 

を与えます。 私はweb.py pythonフレームワークを使用しています。 これを行うにはどうすればよいですか?

答えて

2

データの損失を防ぐために、あなたがバイナリデータを送信するためにできる最善のことはbase64としてエンコードです。

import base64 

def GET(self,r): 
    user_data = CC.get_data(query) # holds the content of the blob field. 
    data = {'name': 'test', 
      'photo': base64.b64encode(user_data)} 
    return json.dump(data) 

しかし、JSON上でバイナリデータを送信することは、本当に特別なウェブでは、推奨されません。たとえば、写真をダウンロードするためのURLを送信することができます。

+0

ありがとうございました。しかし、JSONを使ってバイナリデータを送信することが推奨されず、URLからダウンロードさせる理由を知っているかもしれませんか? –

+0

あなたの実装に大きく依存しますが、クライアントがbase64文字列をデコードする必要はありません。特に、ほとんどのブラウザと同様に、別々に画像をダウンロードして表示できるためです。 –

関連する問題