Estoy creando un sistema de carga de archivos de arrastrar y soltar para cargar galerías de fotos. Este es mi código fuente que maneja archivos caídos. Este funciona con varios archivos si los coloco uno por uno, funciona, pero cuando coloco más de uno al mismo tiempo, ocurre este error:
Uncaught InvalidStateError: Failed to execute 'readAsDataURL' on 'FileReader': The object is already busy reading Blobs.
function handleFiles(files)
{
var reader = new FileReader();
var formdata = new FormData();
$.each(files, function(i, j)
{
$("td.photos span.status").html("Processing file: "+j.name);
formdata.append('file', j);
$.ajax({
url: "uploadalbum.php",
type: "POST",
dataType: "json",
data: formdata,
processData: false,
contentType: false,
success: uploadfinished
});
reader.onload = handleReaderLoad;
reader.readAsDataURL(j);
});
}
¿Algunas ideas?
Creo que ya te dieron el error.
Error al ejecutar ‘readAsDataURL’ en ‘FileReader’: el objeto ya está ocupado leyendo Blobs
Entonces, ¿el lector de archivos ya está ocupado pero solo cuando suelta varios archivos? Entonces probablemente esté ocupado con el primer archivo (y el segundo falla).
cuando pones var reader = new FileReader();
en su jQuery cada ciclo funcionará como se muestra a continuación:
$.each(files, function(i, j)
{
var reader = new FileReader();
$("td.photos span.status").html("Processing file: "+j.name);
formdata.append('file', j);
.... <snip>
}
-
¡Agradable! ¡Me alegro de que te haya ayudado y gracias por avisarnos!
-Dick van den Brink
20 de julio de 2014 a las 3:15
Un caso que puede causar esto es cuando se llama dos veces a un lector de archivos. Si aún se está ejecutando, emitirá este error.
reader.onload = function( event ) {
// do stuff
};
reader.readAsDataURL( file );
/* arbitrarily complex code */
reader.readAsDataURL( file2 );
/* oops */
Bhushan Mahajan
Puede intentar reinicializar el objeto FileReader.
<script type="text/javascript">
debugger;
////////////////Write-1/////////////////////////
var blob = new Blob([], {type: "text/plain"});
for (var i=0; i<10; i++)
{
blob = new Blob([blob," "+i], {type: "text/plain"});
}
/////////////////Write-2//////////////////////////
var parts = [];
for (var i = 11; i < 20; i++)
{
parts.push(" " + i);
}
var blob1 = new Blob(parts);
//////////////////Read-1////////////////////////////
var def = new FileReader();
def.addEventListener("loadend", function(e) { var x = e.srcElement.result; alert(x); });
def.readAsText( blob );
///////////////////Read-2///////////////////////////////
def = new FileReader();
def.addEventListener("loadend", function(e) { var x = e.srcElement.result; alert(x); });
def.readAsText( blob );
/////////////////////////////////////////////////
</script>
tienes que llamar
FileReader.abort()
después de manejar cadaonLoad
– FFF
5 jun 2018 a las 23:40