Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2014, 15:01
Charlie1
 
Fecha de Ingreso: octubre-2013
Mensajes: 30
Antigüedad: 11 años, 1 mes
Puntos: 3
Pregunta Problema subir archivo base64 con AJAX

Buenas chicos, llevo unos día intentando solucionar un error que en teoría no debería producirse, en base estoy probando el sistema de grabado de audio con HTML5 y js, me funcinaba bien, pero si el audio era largo podía fallar la subida, así que decidí dividir la subida con slice, pero a partir de entonces, aunque se crea el audio se escucha con ruido de fondo, a veces un ruido que ni permite oir el audio.

Tras probar de todo en el servidor me di cuenta de que el problema se daba en la subida, pero no consigo dar con cual es el problema concreto, os dejo el código de subida de js para ver si podéis ver que puede estar mal:

Código:
function sendAudio(data, method, url, header, length, perPackage, packages, b)
{
    if ( ! working)
    {
        working = true;
        if (isNaN(b)) 
        {     
            var length = data.length,
            perPackage = 2000000,
            packages   = Math.ceil(parseInt(length)/perPackage),
            b = 0;
        }

        var req = createXMLHttpRequest(method, url, header),
        part = data.slice(perPackage * b, perPackage * (b + 1));

        ++b;

        console.log(b);
        console.log(length);
        console.log(packages);
        console.log(part.length);

        req.setRequestHeader('processData', false);
        req.setRequestHeader('cache', false);
        req.setRequestHeader('Content-Type', false);

        req.send('sound=' + part + '&current=' + b + '&packages=' + packages);

        if (b < packages)
        {

            req.onreadystatechange = function ()
            {
                if (req.readyState === 4 && req.status === 200)
                { 
                    working = false;              
                    sendAudio(data, method, url, header, length, perPackage, packages, b);
                }
            }; 
        }
        else
        {            
            req.onreadystatechange = function ()
            {
                if (req.readyState === 4 && req.status === 200)
                {    
                    working = false;             
                    stopSequenceRecording();
                }
            }; 
        }           
    }    
}
Os dejo como codifico la data para enviar también(Esto es antes de la funcion anterior)

Código:
 //Aquí entramos para guardar el audio
        reader  = new FileReader();         

        reader.onload = function (e) 
        {
        // Enviamos el contenido del archivo de audio y lo codificamos para evitar errores al enviar vía HTTP
            data = encodeURIComponent(reader.result);

            sendAudio(data, method, url, header);                    
            
        };

        // Leemos el archivo
        reader.readAsDataURL(archivo);
Muchas gracias a todos y Feliz Navidad :)