Enregistrer le fichier audio dans les rails

J'ai une application de rails simple où j'utilise HTML web audio avec recorder.js pour enregistrer une voix et puis l'enregistrer sur le serveur d'applications. L'enregistrement se passe bien, je peux reproduire l'enregistrement et entendre le son, mais quand je le publie sur le serveur, mon fichier audio est vide.

Code html / js

function stopRecording() { recorder.stop(); recorder.exportWAV(function(s) { audio.src = window.URL.createObjectURL(s); sendWaveToPost(s); }); } function sendWaveToPost1(blob) { alert('in'); var data = new FormData(); data.append("audio", blob, (new Date()).getTime() + ".wav"); var oReq = new XMLHttpRequest(); oReq.open("POST", "/audio/save_file"); oReq.send(data); oReq.onload = function(oEvent) { if (oReq.status == 200) { console.log("Uploaded"); } else { console.log("Error " + oReq.status + " occurred uploading your file."); } }; } 

Code contrôleur

 def save_file audio = params[:audio] save_path = Rails.root.join("public/#{audio.original_filename}") # Open and write the file to file system. File.open(save_path, 'wb') do |f| f.write params[:audio].read end render :text=> 'hi' end 

Journal de la console

 Parameters: {"audio"=>#<ActionDispatch::Http::UploadedFile:0xb61fea30 @original_filename="1379157692066.wav", @content_type="audio/wav", @headers="Content- Disposition: form-data; name=\"audio\"; filename=\"1379157692066.wav\"\r\nContent-Type: audio/wav\r\n", @tempfile=#<File:/tmp/RackMultipart20130914-3587-tgwevx>>} 

D'accord, j'ai obtenu la réponse.

Le problème est le moment où le fichier est entré, il aura le curseur de lecture placé à la fin du fichier afin que nous ayons besoin de rebobiner le fichier pour s'assurer que le curseur de lecture est défini au début.

J'ai changé mon code de contrôleur ci-dessous et cela a fonctionné.

  audio.rewind # Open and write the file to file system. File.open(save_path, 'wb') do |f| f.write audio.read end 

Essayer:

 File.open(save_path, 'wb:binary') do |f|