[asp.net-mvc] ¿Cómo puedo presentar un archivo para descargar desde un controlador MVC?



Answers

Para forzar la descarga de un archivo PDF, en lugar de ser manejado por el complemento PDF del navegador:

public ActionResult DownloadPDF()
{
    return File("~/Content/MyFile.pdf", "application/pdf", "MyRenamedFile.pdf");
}

Si desea que el navegador maneje por su comportamiento predeterminado (complemento o descarga), solo envíe dos parámetros.

public ActionResult DownloadPDF()
{
    return File("~/Content/MyFile.pdf", "application/pdf");
}

Tendrá que usar el tercer parámetro para especificar un nombre para el archivo en el diálogo del navegador.

ACTUALIZACIÓN: Charlino tiene razón, al pasar el tercer parámetro (nombre de archivo de descarga) Content-Disposition: attachment; se agrega al encabezado de respuesta Http. Mi solución fue enviar application\force-download como mime-type, pero esto genera un problema con el nombre de archivo de la descarga, por lo que se requiere el tercer parámetro para enviar un buen nombre de archivo, eliminando así la necesidad de forzar una descarga .

Question

En WebForms, normalmente tendría un código como este para permitir que el navegador presente una ventana emergente de "Descargar archivo" con un tipo de archivo arbitrario, como un PDF, y un nombre de archivo:

Response.Clear()
Response.ClearHeaders()
''# Send the file to the output stream
Response.Buffer = True

Response.AddHeader("Content-Length", pdfData.Length.ToString())
Response.AddHeader("Content-Disposition", "attachment; filename= " & Server.HtmlEncode(filename))

''# Set the output stream to the correct content type (PDF).
Response.ContentType = "application/pdf"

''# Output the file
Response.BinaryWrite(pdfData)

''# Flushing the Response to display the serialized data
''# to the client browser.
Response.Flush()
Response.End()

¿Cómo realizo la misma tarea en ASP.NET MVC?




Debería mirar el método de Archivo del Controlador. Esto es exactamente para lo que es. Devuelve un FilePathResult en lugar de un ActionResult.




Use el tipo de archivo .ashx y use el mismo código




Related