前提・実現したいこと
Ruby on Railsを利用したポートフォリオを作成しており、機能として、ブラウザ上から音声を録音し、その録音した音声を、ajaxを用いて、controllerに渡し、そこでさらにWebApiにデータを渡したいと考えております。
その音声録音したデータを上手くcontroller側に渡せずに困っています。
音声の録音はjavascriptのWebAudioApiを用いています。
発生している問題・エラーメッセージ
コントローラー内でbyebugを記載し、paramsを確認するも、下記のように期待する値は入っておりませんでした。
(byebug) params #<ActionController::Parameters {"controller"=>"static_pages", "action"=>"top"} permitted: false>
chromeデベロッパーツール、Railsコンソールでのエラーは出てきておりません。
該当のソースコード
#top.html.erb methods: { // 録音を開始する部分 startRecording() { this.status = 'recording'; this.audioData = []; this.recorder.start(); }, // 音声ファイルの拡張子を取得する部分 getExtension(audioType) { let extension = 'wav'; const matches = audioType.match(/audio/([^;]+)/); if(matches) { extension = matches[1]; } return '.'+ extension; }, }, mounted() { // マイクにアクセス navigator.mediaDevices.getUserMedia({ audio: true }) .then(stream => { let audioBlob; this.recorder = new MediaRecorder(stream); this.recorder.addEventListener('dataavailable', e => { this.audioData.push(e.data); this.audioExtension = this.getExtension(e.data.type); }); //ここから音声録音を開始 this.recorder.addEventListener('stop', () => { audioBlob = new Blob(this.audioData,{type: 'audio/wav'}); console.log(audioBlob); formData = new FormData(); formData.append("audio", audioBlob); console.log(formData); $.ajax({ url: '/static_pages', type: 'POST', contentType: false, processData: false, //dataType: 'json', data: {audio: formData}, }) .done(function(data){ console.log(data); }) .fail(function(data){ console.log("送信に失敗しました"); });
#controller def create @audio = params[:audio] end
試したこと
参考記事
上記参考記事をもとにコードなど確認しましたが、渡せていない直接の原因がわかりませんでした。
しかしformData.append("audio", audioBlob);の後のconsole.log(formData);でForm Dataが入っていないと思われるので
回答1件
あなたの回答
tips
プレビュー