2016-10-05 18 views
0

Flaskを使用してJSからPythonに.wavオーディオファイル(BLOB)を送信しようとしています。私は単純にファイルをPythonの最後に保存し、それを自分のコンピュータで再生できるようにしたいだけです。ここに私の試みは、次のとおりです。JSからPythonへのオーディオデータの送信

JS:ファイルが保存されただけshitloadsが含まれています

@app.route('/messages', methods = ['POST']) 
def api_message(): 
     # Open file and write binary (blob) data 
     f = open('./file.wav', 'wb') 
     f.write(request.data) 
     f.close() 
     return "Binary message written!" 

:PythonのブロブはタイプBlob {size: 5040, type: "audio/wav;"}

である

fetch(serverUrl, { 
    method: "post", 
    body: blob 
}); 

[object BlobEvent]です。私は間違って何をしているのですか?どうすれば修正できますか?

編集: オーディオサンプルがMediaRecorder()

const mediaRecorder = new MediaRecorder(stream); 
// Start 
const chunks = []; 
mediaRecorder.ondataavailable = e => { 
    chunks.push(e); 
} 
// On stop 
blob = new Blob(chunks, {'type': 'audio/wav;'}); 

を使用して収集され、私はクライアント側で再びオーディオを再生しようと、それだけで正常に動作します:

const audio = document.createElement('audio'); 
const audioURL = window.URL.createObjectURL(blob); 
audio.src = audioURL; 
+0

あるべきではJavaScriptオブジェクトのデフォルトの表現のように見えます。つまり、あなたの 'blob'変数の内容はバイナリデータではありません。 'blob'はどのように設定されていますか? –

+0

ご意見ありがとうございます。私はブロブに関するいくつかの追加情報で私の質問を更新しました – novalain

答えて

3

を。
データがe.dataですので、あなたのコードが

mediaRecorder.ondataavailable = e => { 
    chunks.push(e.data); 
} 
0

は、使用してみましたFormData? Pythonの終わりには

var form = new FormData(); 
form.append('file', BLOBDATA, FILENAME); 

$.ajax({ 
    type: 'POST', 
    url: 'ServerURL', 
    data: form, // Our pretty new form 
    cache: false, 
    processData: false, // tell jQuery not to process the data 
    contentType: false // tell jQuery not to set contentType 
}).done(function(data) { 
    console.log(data); 
}); 

データの場合は、あなたのような何か実行してそこにチェックすることができ:あなたは、オーディオデータのBlobコンストラクタにイベントオブジェクトの配列をいない渡している

@app.route('/messages', methods=['POST']) 
def api_message(): 
    app.logger.debug(request.files['file'].filename) 
+0

FormDataを使ってみましたが、結果は同じようです。あなたの例を試してみると、ファイル名が得られますが、[オブジェクトBlobEvent]を取得せずにバイナリオーディオデータを取得するにはどうすればよいですか? – novalain

+0

Musaは正しいです、私は文字通り、彼の答えがポップアップしたときにBlobの構築に関する文書を見つけました。電話の.data部分を見逃しただけです。 'var chunks = []; mediaRecorder.ondataavailable = function(e){ chunks.push(e.data); } '詳細については、[link](https://developer.mozilla.org/en-US/docs/Web/API/MediaRecorder_API/Using_the_MediaRecorder_API)を参照してください。 –

関連する問題