Solo lectura

Google Chrome - Foro de ayuda

Esta página web es un archivo de los hilos antiguos de los foros de Google. Más información

Error:Error de Red

Jose Andres Villa Loza
28/12/17 6:51
Tengo el siguiente codigo angularjs para descargar un archivo txt desde un servicio creado en laravel:

var hiddenElement = document.createElement('a');
hiddenElement.href = 'data:attachment/txt,' + encodeURI(response);
hiddenElement.target = '_blank';
hiddenElement.download = 'distribucion.txt';
hiddenElement.click();

me funciona con archivos pequeños, pero si tengo un archivo de mas de 20 MB me sale este error
en el navegador: Error:Error de Red, en la descarga,sin embargo en otros navegadores funciona
y descarga el archivo.
saludos y espero una respuesta, gracias

Respuestas (3)

avm99963
28/12/17 13:26
¡Hola Jose Andres!

Existen unos límites en cuanto al número de caracteres que puede representar el href. Según he podido ver por un artículo, el límite está alrededor de los 2MB.[1]

Si quieres poder descargar más de 2MB (o 20MB como tú dices), entonces deberías usar la función URL.createObjectUrl(). El siguiente código, por ejemplo, me funciona:

// Genero una string de prueba muuuy larga
var response = "";
for (var i = 0; i < 2000000; ++i) {
 response
+= "abcdefghijk";
}

// Aquí convierto la URL del fichero a un blob, para poder usarlo con la función URL.createObjectURL
var urlblob = new Blob(['data:attachment/txt,'+encodeURI(response)], {
 type
: 'text/plain'
});


var hiddenElement = document.createElement('a');

hiddenElement
.href = URL.createObjectURL(urlblob); // Aquí en vez de poner la URL tal cual ponemos el resultado de la función

hiddenElement
.target = '_blank';
hiddenElement
.download = 'distribucion.txt';
hiddenElement
.click();

Espero que esto haya ayudado. ¡Ya me contarás! ;)

Saludos :-)


Para continuar con la conversación, debes regresar al Foro.
Las respuestas por correo electrónico no llegan  Acceder al hilo
Jose Andres Villa Loza
28/12/17 14:16
Gracias estimado, el que me envio no me funciono porque al convertir a blob se cambiaron los datos, este codigo si funciona:

var blob = new Blob([response], {type: 'text/csv'});
var filename = 'Distribucion.txt';
if(window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveBlob(blob, filename);
}
else{
var elem = window.document.createElement('a');
elem.href = window.URL.createObjectURL(blob);
elem.download = filename;
document.body.appendChild(elem);
elem.click();
document.body.removeChild(elem);
}

Mil gracias de todos modos, saludos 
avm99963
28/12/17 15:16
Uh, vaya, ¡me precipité en compartir algo que estaba mal! :(

Gracias por la corrección y por compartir que funcionó :D

Marco tu respuesta como mejor respuesta para que otra gente que visite el hilo pueda verlo arriba del todo y para marcarlo como solucionado.

Cualquier otra duda estamos por aquí :)