Descargar PDF forzado en lugar de abrirlo en el navegador
-
21-12-2019 - |
Pregunta
Estoy usando RazorPDF y me gustaría forzar la descarga del PDF en lugar de abrirlo en la pestaña del navegador.¿Cómo hago esto?Gracias
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(string Id)
{
return RedirectToAction("Pdf");
}
public PdfResult Pdf()
{
// With no Model and default view name. Pdf is always the default view name
return new PdfResult();
}
Solución
Intente agregar el content-disposition
encabezado antes de devolver el PDFResult
objeto.
public PdfResult Pdf()
{
Response.AddHeader("content-disposition", "attachment; filename=YourSanitazedFileName.pdf");
// With no Model and default view name. Pdf is always the default view name
return new PdfResult();
}
Otros consejos
Debes mirar el encabezado "Disposición-disposición";Por ejemplo, la configuración de "Disposición-disposición" a "ADJUNTO; FILENAME= FILENAME.PDF" solicitará al usuario (normalmente) con un cuadro de diálogo "Guardar como: filename.pdf", en lugar de abrirlo.Esto, sin embargo, debe provenir de la solicitud que está haciendo la descarga, por lo que no puede hacer esto durante una redirección.Sin embargo, ASP.NET ofrece respuesta. TRANSMITFILE para este propósito.Por ejemplo (asumiendo que no está usando MVC, que tiene otras opciones preferidas):
Response.Clear();
Response.ContentType = "application/pdf";
Response.AppendHeader("Content-Disposition", "attachment; filename=FileName.pdf");
Response.TransmitFile(filePath);
Response.End();
Si intenta abrir, entonces el archivo en API convierte el flujo a BYTESARRAY y luego llene el contenido
HttpResponseMessage result = null;
result = Request.CreateResponse(HttpStatusCode.OK);
FileStream stream = File.OpenRead(path);
byte[] fileBytes = new byte[stream.Length];
stream.Read(fileBytes, 0, fileBytes.Length);
stream.Close();
result.Content = new ByteArrayContent(fileBytes);
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentDisposition.FileName = "FileName.pdf";