Descarga de archivos PDF a través de XHR Request

¿Es totalmente imposible descargar un archivo pdf a través de una solicitud XHR? Sé que ya hay muchas otras discusiones sobre este tema pero, lamentablemente, todavía no estoy satisfecho con ellas. Estoy usando AngularJs y haciendo una solicitud usando su método $Http . No devuelve ninguna ventana emergente de descarga de archivos. Pero si presiono con la misma URL en una nueva ventana del navegador, recibiré una ventana emergente. Ya he probado un entorno de trabajo y está funcionando bien, es decir, document.location.href = url; pero si hago esto, no puedo mostrar la imagen de espera hasta que la ventana emergente de descarga esté lista y aparezca. Entonces el trabajo no es suficiente para mí. Me gustaría hacerlo de forma genuina a través de una solicitud al servidor a través de la cual también puedo manejar los flujos alternativos del resultado.

Eche un vistazo a este plugin de JQuery jquery-file-download-plugin y aquí está la página de demostración de esta demostración de plugins. Creo que está insertando el iframe dinámicamente en DOM y produce una apariencia similar a la solicitud AJAX. Puede ser útil para ti.

Sin duda, depende del tamaño del archivo PDF, pero este sería un enfoque viable si el PDF no es demasiado grande:

  1. Muestre la “imagen de espera” y descargue el PDF usando $http .

     $http.get('http://my.example.com/foo.pdf').success(function(pdfData) { ... do something with pdfData ... }); 
  2. Convierta pdfData en encoding Base64 y utilice un esquema de URI de datos para crear una URL para el archivo PDF descargado.

  3. Redirigir a esa URL.