manejo from convert bytes array archivos javascript jquery post request response

convert - javascript download pdf from byte array



Descargar archivo de bytes en JavaScript (3)

Establezca el type Blob constructor Blob en lugar de en createObjectURL

var blob = new Blob([resultByte], {type: "application/pdf"}); var link = document.createElement("a"); link.href = window.URL.createObjectURL(blob); link.download = "myFileName.pdf"; link.click();

Quiero descargar el archivo que viene en forma de bytes de la respuesta AJAX.

Traté de hacerlo de esta manera con la ayuda de Bolb :

var blob=new Blob([resultByte], {type: "application/pdf"}); var link=document.createElement(''a''); link.href=window.URL.createObjectURL(blob); link.download="myFileName.pdf"; link.click();

De hecho, está descargando el archivo pdf, pero el archivo en sí está dañado.

¿Cómo puedo lograr esto?


Hice la pregunta hace mucho tiempo, por lo que podría estar equivocado en algunos detalles.

Resulta que Blob necesita buffers de matriz. Es por eso que los bytes base64 deben convertirse primero en buffers de matriz.

Aquí está la función para hacer eso:

function base64ToArrayBuffer(base64) { var binaryString = window.atob(base64); var binaryLen = binaryString.length; var bytes = new Uint8Array(binaryLen); for (var i = 0; i < binaryLen; i++) { var ascii = binaryString.charCodeAt(i); bytes[i] = ascii; } return bytes; }

Aquí está mi función para guardar un archivo pdf:

function saveByteArray(reportName, byte) { var blob = new Blob([byte], {type: "application/pdf"}); var link = document.createElement(''a''); link.href = window.URL.createObjectURL(blob); var fileName = reportName; link.download = fileName; link.click(); };

Aquí se explica cómo usar estas dos funciones juntas:

var sampleArr = base64ToArrayBuffer(data); saveByteArray("Sample Report", sampleArr);


Solo necesita agregar una línea adicional y debería funcionar. Su respuesta es una matriz de bytes de su aplicación de servidor

var bytes = new Uint8Array(resultByte); // pass your byte response to this constructor var blob=new Blob([bytes], {type: "application/pdf"});// change resultByte to bytes var link=document.createElement(''a''); link.href=window.URL.createObjectURL(blob); link.download="myFileName.pdf"; link.click();