前提
flaskを用いてwebアプリを作っています。
JavascriptからAjaxを使ってPythonにデータを受け渡したいと思ってます。
データはBlobです。Python側でrequest.form['blob']とするとエラーを吐きます。
実現したいこと
Javascriptで画像をトリミングし、その結果をAjaxを使ってPythonにデータを受け渡したい。
発生している問題・エラーメッセージ
werkzeug.exceptions.BadRequestKeyError: 400 Bad Request: The browser (or proxy) sent a request that this server could not understand. KeyError: 'blob'
該当のソースコード
JavaScript
1function send_data(blob){ 2 var fData = new FormData(); 3 fData.append('blob', blob); 4 //ajax送信 5 $.ajax({ 6 //画像処理サーバーに返す 7 url: 'http://127.0.0.1:5000/top', 8 type: 'POST', 9 data: fData, 10 dataType: 'binary', 11 responseType:'blob', 12 processData: false, 13 success: function(data, dataType) { 14 //非同期で通信成功時に読み出される [200 OK 時] 15 console.log('Success', data); 16 }, 17 error: function(XMLHttpRequest, textStatus, errorThrown) { 18 //非同期で通信失敗時に読み出される 19 console.log('Error : ' + errorThrown); 20 } 21 }); 22
Python
1@app.route('/top', methods=['GET', 'POST']) 2def post(): 3 if request.method == 'POST': 4 enc_data = request.form['blob'] #ここでエラーが起きる 5 dec_data = base64.b64decode( enc_data.split(',')[1] ) # 環境依存の様(","で区切って本体をdecode) 6 dec_img = Image.open(BytesIO(dec_data)) 7 dec_img.save("test222.png") 8 return redirect('/test') 9 else: 10 return render_template('top.html')
試したこと
Python側でprint(request.form)を実行するとターミナルに大量の文字が出力されていたのでrequestの中にはBlobが入っていると考えられます。
補足情報(FW/ツールのバージョンなど)
Python3.8.5
フレームワーク:flask
Ajaxは<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js"></script>
で読み込んでいて動作確認はできています。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。