2013-09-25 10 views
14

Sto provando a catturare l'audiorecorder (https://github.com/cwilso/AudioRecorder) e inviare il BLOB tramite Ajax a un file php, che riceverà il contenuto blob e creerà il file (il file wave in questo caso).Passare Blob attraverso ajax per generare un file

Ajax chiamata:

audioRecorder.exportWAV(function(blob) { 
     var url = (window.URL || window.webkitURL).createObjectURL(blob); 
     console.log(url); 
     var filename = <?php echo $filename;?>; 
     $.ajaxFileUpload({ 
     url : "lib/vocal_render.php", 
     secureuri  :false, 
     dataType : blob.type, 
     data: blob, 
     success: function(data, status) { 
      if(data.status != 'error') 
      alert("boa!"); 
     } 
     }); 
    }); 

e il mio file php (vocal_render.php):

<?php 

if(!empty($_POST)){ 
    $data = implode($_POST); //transforms the char array with the blob url to a string 
    $fname = "11" . ".wav"; 

    $file = fopen("../ext/wav/testes/" .$fname, 'w'); 
    fwrite($file, $data); 
    fclose($file); 
}?> 

P.S: Sono newbie con macchie e Ajax. Grazie in anticipo.

risposta

25

prova a caricare il file come dati del modulo

audioRecorder.exportWAV(function(blob) { 

     var url = (window.URL || window.webkitURL).createObjectURL(blob); 
     console.log(url); 

     var filename = <?php echo $filename;?>; 
     var data = new FormData(); 
     data.append('file', blob); 

     $.ajax({ 
     url : "lib/vocal_render.php", 
     type: 'POST', 
     data: data, 
     contentType: false, 
     processData: false, 
     success: function(data) { 
      alert("boa!"); 
     },  
     error: function() { 
      alert("not so boa!"); 
     } 
     }); 
}); 

.

<?php 

if(isset($_FILES['file']) and !$_FILES['file']['error']){ 
    $fname = "11" . ".wav"; 

    move_uploaded_file($_FILES['file']['tmp_name'], "../ext/wav/testes/" . $fname); 
} 
?> 
+0

Grazie Musa! Ha funzionato! –

+1

@ user2558656 prego. – Musa

+0

Funziona anche senza "FormData"? In modo che sia possibile inviarlo con un tipo di immagine MIME? –

0

Secondo il documentation, utilizzando XMLHttpRequest.send() è possibile utilizzare direttamente l'oggetto Blob.

var blob = new Blob(chunks, { 'type' : 'audio/webm' }); 
var xhr = new XMLHttpRequest(); 
xhr.open('POST', '/speech', true); 
xhr.onload = function(e) { 
    console.log('Sent'); 
}; 
xhr.send(blob); 

Ho provato questo e funziona come un fascino.

Problemi correlati