Estoy tratando de descargar y guardar un archivo PDF usando ajax/jquery (lo sé…).
Esto es lo que tengo en el lado del servidor:
public HttpResponseMessage GetPdf()
{
var pdf = generatePdfByteArray(); // byte[]
var result = Request.CreateResponse(HttpStatusCode.OK);
result.Content = new ByteArrayContent(pdf);
//result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
//{
// FileName = "blah.pdf"
//};
// tried with and without content disposition.. shouldn't matter, i think?
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return result;
}
Este es el lado del cliente:
let ajaxOptions = {
url: '/url',
type: "GET",
accepts: "application/pdf",
success: (data) => {
let blob = new Blob(data, {
type: "application/pdf"
}); // <-- this fails
// stuff...
}
};
$.ajax(ajaxOptions);
¿Alguna idea de lo que está mal con esto?
El primer parámetro debe ser secuencia.
Por lo tanto, esto no funcionará:
let blob = new Blob(data, {
type: "application/pdf"
});
Pero esto:
let blob = new Blob([data], {
type: "application/pdf"
});
Esto es con lo que terminé:
public HttpResponseMessage GetPdf()
{
var pdf = generatePdfByteArray();
var result = Request.CreateResponse(HttpStatusCode.OK);
var dataStream = new MemoryStream(pdf);
result.Content = new StreamContent(dataStream);
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "file.pdf"
};
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return result;
}
¿Ha sido útil esta solución?
Tu feedback nos ayuda a saber si la solución es correcta y está funcionando. De esta manera podemos revisar y corregir el contenido.
por qué desea que el blob sea simple, simplemente haga clic en el ancla o en el botón que está llamando a la API, el resto lo hará el navegador
– Negi Rox
13 de marzo de 2019 a las 3:32
Porque quiero interceptar la llamada y mostrar un mensaje si algo sale mal en el servidor
– Thinkhoop
13 de marzo de 2019 a las 13:39