Saltar al contenido

Problema al descargar un blob PDF en JavaScript

Hacemos una revisión profunda cada secciones en nuestro espacio con el objetivo de mostrarte en todo momento la información con la mayor veracidad y actual.

Solución:

No puedo decir con certeza por qué su código no funciona, pero puedo decir con certeza que lo que está haciendo es inútil en el mejor de los casos.

No convierta un blob en un dataURIel 99 %* de las veces, lo que desea hacer con este dataURI se puede hacer directamente con el Blob original y un blobURI.

*El 1% restante es cuando necesita crear documentos independientes que incluirán datos binarios, sucede pero no con tanta frecuencia.

Aquí, una vez más, lo que desea hacer (establecer un ancla para apuntar a los datos de su Blob) se puede hacer directamente con el Blob: simplemente cree un blobURI (que es solo un puntero a los datos en la memoria) llamando URL.createObjectURL(blob).

const downloadFile = (blob, fileName) => 
  const link = document.createElement('a');
  // create a blobURI pointing to our Blob
  link.href = URL.createObjectURL(blob);
  link.download = fileName;
  // some browser needs the anchor to be in the doc
  document.body.append(link);
  link.click();
  link.remove();
  // in case the Blob uses a lot of memory
  setTimeout(() => URL.revokeObjectURL(link.href), 7000);
;


downloadFile(new Blob(['random data']), "myfile.txt");

Intenté usar Fetch API para descargar el archivo PDF del servidor que está dando octet-stream contenido como respuesta. Entonces, si revisa la respuesta, obtendrá caracteres como estos %PDF-1.4

Aquí está la solución:

function download(pdfUrl) 
        fetch(pdfUrl).then(resp => resp.arrayBuffer()).then(resp => 

            // set the blog type to final pdf
            const file = new Blob([resp], type: 'application/pdf');

            // process to auto download it
            const fileURL = URL.createObjectURL(file);
            const link = document.createElement('a');
            link.href = fileURL;
            link.download = "FileName" + new Date() + ".pdf";
            link.click();
        );
    

Puede usar el mismo método y decodificar el contenido del flujo de octetos antes de crear el blob.

Sección de Reseñas y Valoraciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *