07/01/2015, 08:23
|
| | Fecha de Ingreso: octubre-2013
Mensajes: 30
Antigüedad: 11 años, 1 mes Puntos: 3 | |
Respuesta: Problema subir archivo base64 con AJAX Bueno ya lo solucioné hace unos días, os dejo lo que hice por si a alguien le es útil.
Básicamente cambié el reader para leer como binario en vez de como dataUrl.
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 = reader.result;
sendAudio(data, method, url, header);
};
// Leemos el archivo
// reader.readAsDataURL(archivo);
reader.readAsBinaryString(archivo);
y depués dividí el archivo binario para luego codificarlo en base64 y subirlo al server, de esa forma ya no tuve problemas de fallos con el audio.
Código:
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;
req.setRequestHeader('processData', false);
req.setRequestHeader('cache', false);
//req.setRequestHeader('Content-Type', false);
part = btoa(part);
part = 'data:audio/wav;base64,' + part;
req.send('sound=' + encodeURIComponent(part) + '¤t=' + 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();
}
};
}
}
|