###前提・実現したいこと
今までUnity(クライアント)からのリクエストは文字列だけを扱っていて
Unityでjsonの文字列をバイト型に変換したものをリクエストで送信していました。
Python(サーバー)は、受け取ったリクエストのバイト型を
文字列(string)に直し、json.loads()
で扱いやすい形にしてから扱うと言った流れで進めていました。
今回起きた問題は画像のデータを扱うことで発生した問題です。
Unity側は画像をバイナリデータで送信するために新しく
WWWForm
のAddBinaryData()
を扱うことになりました。
そして、Python側で送られてきたバイト型のデータを
今まで通り文字列に変換しようとしたところでエラーが発生しました。
stringに変換している理由はjson.loads()
がbytesには対応していないからです。
画像はこの後AWSのS3にアップロードしたいため
バイナリか、画像データで扱える状態にしたいです。
###発生している問題・エラーメッセージ
エラーは上記コードの
body = body.decode("utf-8")
の
行で発生しています。
UnicodeDecodeError: 'utf-8' codec can't decode byte 0x89 in position 139: invalid start byte
###該当のソースコード
Unity(画像データを送信する側)
C#
1WWWForm form = new WWWForm; 2form.AddBinaryData("testimage", data, null, null); 3uging(UnityWebRequest www = UnityWebRequest.Post(url,form)) { 4 www.SetRequestHeader("Content-Type", "application/json"); 5 yirld return www.Send(); 6}
Python(画像データを受け取る側)
Python
1def on_post(self, req, res): 2 print("POST") 3 # postパラメーターを取得 4 body = req.stream.read() 5 6 # bytes型で受け取るので、文字列に変換する。 7 if type(body) == bytes: 8 body = body.decode("utf-8") 9 data = json.loads(body)
###補足情報(言語/FW/ツール等のバージョンなど)
Mac
Unity5.5,
AWS EC2インスタンス
Nginx
gunicorn
Python3.5
falcon
回答4件
あなたの回答
tips
プレビュー