Vue.jsからFlaskに音声ファイルと文字列を同時にaxiosでpostしたいです。
音声ファイルはformDataを用いて、文字列はそのままpostする方法ならわかるのですが、同時にpostする方法がわかりません。
javascript
1upload_mp3: function(e) { 2 let self = this; 3 let formData = new FormData(); 4 formData.append('mp3', this.uploadFile); 5 let config = { 6 headers: { 7 'content-type': 'multipart/form-data', 8 } 9 }; 10 axios 11 .post('http://127.0.0.1:5000/mp3_upload', formData, config) 12 .then(function(response) { 13 console.log("mp3 data was sent"); 14 }) 15 .catch(error => { 16 console.log(error); 17 alert("error: mp3 data was NOT sent"); 18 }); 19 },
ここに文字列をくっつけて一緒にpostしたいのですが可能でしょうか。
##試した方法1
一緒にFormDataにappendする
javascript
1formData.append('mp3', this.uploadFile); 2formData.append('name', 'hogehoge');
この場合Flask側で上手く取り出せません。
Python
1# こちらはエラーが出ずに正常にファイルデータを取り出せる 2mp3_file = request.files['mp3'] 3 4# こちらが原因でエラーが出る 5name = request.files['name']
エラーはconsole.logにのみ出て、Python側には出ません。
POST http://127.0.0.1:5000/mp3_upload 400 (BAD REQUEST)
また、request.filesの中身を以下のようにして覗こうとすると、
python
1print(request.files)
ImmutableMultiDict([('mp3', <FileStorage: 'npl_speech.mp3' ('audio/mp3')>)])
と出力されます('npl_speech.mp3'は音声ファイル名です)
##試した方法2
formDataを用いずに、連想配列の形でFlaskにpostしようとしましたが、Flask側から見るとファイルの中身が空になっていました。
javascript
1let formData = new FormData(); 2 formData.append("mp3", this.uploadFile); 3 let data = { 4 'formdata': formData, 5 'name': 'hogehoge' 6 }
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。