¿Cómo enviar PDF en respuesta de ruta rápida y forzar la descarga del navegador?

En este artículo, veremos cómo enviar archivos PDF en la respuesta de la ruta rápida y hacer que el navegador fuerce la descarga del archivo.

Acercarse:

  1. Cargue los paquetes requeridos, luego cree una aplicación rápida.
  2. Defina las rutas para la página de inicio y las requests de descarga de PDF.
  3. Cree un archivo index.html con un solo botón para descargar PDF.
  4. Ejecute la llamada ajax al hacer clic en el botón para OBTENER el PDF.
  5. Especifique el tipo de respuesta de la llamada ajax como «blob» en xhrFields , ya que «blob» se usa para almacenar objetos como imágenes, audios y videos, ya que requieren más espacio que otros tipos de datos.
  6. En una llamada ajax exitosa, convierta el archivo PDF recibido de formato blob a formato PDF.
  7. Ahora, para hacer que el navegador fuerce la descarga del PDF:
    a. Cree una etiqueta <a> oculta.
    b. Cree una referencia al archivo usando el método window.URL.createObjectURL().
    C. Establezca su atributo href en la URL del blob.
    d. Establezca su atributo de descarga en el nombre del archivo.
    mi. Haga clic en la etiqueta <a> .
    F. Elimina la etiqueta <a> del DOM.
    gramo. Libere una URL de objeto existente (la referencia al archivo) e informe al navegador que no debe mantener la referencia al archivo por más tiempo.

Paso 1: Instale los paquetes necesarios

En primer lugar, instale los siguientes paquetes de Nodes.

npm install --save express

Paso 2: Cree una configuración básica de servidor Express

Cree un archivo llamado app.js y con el siguiente código como se muestra a continuación.

App.js

// Load necessary packages
const express = require("express");
  
// create an express app
const app = express();
  
// define PORT number to listen to the requests
const PORT = process.env.PORT || 3000;
  
// to serve files from uploads directory
app.use("/uploads", express.static("uploads"));
  
// express routes
app.use("/", require("./routes"));
  
// listen to requests
app.listen(PORT, () => console.log(`Server started running on PORT ${PORT}`));

Paso 3: Definir rutas para la aplicación

Cree un archivo llamado route.js y con el siguiente código como se muestra a continuación.

routes.js

// Load necessary packages
const express = require("express");
  
// express router 
const router = express.Router();
  
// respond with index.html when a GET request is made to the homepage
router.get("/", (req, res) => {
    res.sendFile(__dirname + "/views/index.html");
});
  
// route for handling PDF request
router.get("/downloadPDF", (req, res) => {
    res.download("uploads/Resume.pdf");
});
  
// export router middleware and use it in app.js
module.exports = router;

Paso 4: ejecutar el servidor

Ahora inicie su servidor express usando el siguiente comando:

node app.js

Paso 5: Abra el navegador e ingrese la URL 

Abra su navegador favorito y en la barra de direcciones ingrese http://localhost:3000/downloadPDF y luego presione Enter, el archivo Resume.pdf se descargará automáticamente.

Producción:

Paso 6: Hacer que el PDF sea descargable a través de un botón.

Puede hacer que el navegador descargue el PDF con un clic de un botón usando el detector de eventos de clic en el botón y luego haciendo una solicitud ajax a la URL anterior.

Para hacer la descarga de PDF al hacer clic en el botón, primero cree un archivo index.html con los siguientes contenidos:

index.html

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8" />
 <meta http-equiv="X-UA-Compatible" content="IE=edge" />
 <meta name="viewport" 
       content="width=device-width, initial-scale=1.0" />
 <link
  href=
"https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/css/bootstrap.min.css"
  rel="stylesheet"
  integrity=
"sha384-eOJMYsd53ii+scO/bJGFsiCZc+5NDVN2yr8+0RDqr0Ql0h+rP48ckxlpbzKgwra6"
  crossorigin="anonymous"
 />
</head>
<body>
 <div class="container">
  <button id="download" class="btn btn-primary my-5">
   Download PDF
  </button>
 </div>
 <script src=
"https://code.jquery.com/jquery-3.6.0.js"
         integrity=
"sha256-H+K7U5CnXl1h5ywQfKtSj8PCmoN9aaq30gDh27Xc0jk="
  crossorigin="anonymous">
 </script>
 <script src=
"https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta3/dist/js/bootstrap.bundle.min.js"
         integrity=
"sha384-JEW9xMcG8R+pH31jmWH6WWP0WintQrMb4s7ZOdauHnUtxwoG2vI5DkLtS3qm9Ekf"
  crossorigin="anonymous">
 </script>
  
 <script>
  $("#download").click(function (e) {
   $.ajax({
    type: "GET",
    url: "/downloadPDF",
    xhrFields: {
     // specify response type as "blob" to handle objects
     responseType: "blob",
    },
    success: function (data) {
  
     // creating a hidden <a> tag
     var a = document.createElement("a");
  
     // creating a reference to the file
     var url = window.URL.createObjectURL(data);
  
     // setting anchor tag's href attribute to the blob's URL
     a.href = url;
  
     // setting anchor tag's download attribute to the filename
     a.download = "Resume.pdf";
     document.body.append(a);
  
     // click on the <a> tag
     a.click();
  
     // after clicking it, remove it from the DOM
     a.remove();
     // release an existing object URL which was previously 
     // created by calling URL.createObjectURL()
     // once we have finished using an object URL, let the
     // browser know not to keep the reference to the file any longer.
     window.URL.revokeObjectURL(url);
    },
    error: function (result) {
     alert("error");
    },
   });
  });
 </script>
</body>
</html>

Producción:

Publicación traducida automáticamente

Artículo escrito por girishthatte y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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