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();