2012-06-19 521 views
7

Tengo una aplicación MVC. Necesito abrir el archivo pdf cuando el usuario hace clic en el botón Abrir en la página. El archivo donde se almacena el pdf se lee de la base de datos y es un archivo en c :. ¿Cómo lo abro en mi código html? Tengo este código:ASP.NET MVC abrir archivo pdf en una nueva ventana

<a href="@Model.CertificatePath" target="_blank" class="button3">Open</a> 

pero esto no abre mi archivo. ¿Que tengo que hacer? Necesito especificar en algún lugar que es un pdf?

Respuesta

10

Deberá proporcionar una ruta a una acción que recibirá un nombre de archivo, resolverá la ruta completa y luego transmitirá el archivo en disco desde el servidor al cliente. Los clientes en la web, afortunadamente, no pueden leer archivos directamente desde el sistema de archivos de su servidor (a menos que ... ¿está sugiriendo que @Model.CertificatePath es la ruta al archivo en la máquina del usuario remoto?).

public ActionResult Download(string fileName) 
{ 
    string path = Path.Combine(@"C:\path\to\files", fileName); 

    return File(path, "application/pdf"); 

} 

actualización

Si @Model.CertificatePath es la ubicación en la máquina real del cliente, tratar:

<a href="file://@Model.CertificatePath" target="_blank" class="button3">Open</a> 

Tenga en cuenta que algunos navegadores pueden tener la configuración de seguridad que no permitir abrir archivos locales.

+0

¿Dónde puedo resolver la ruta y cómo puedo transmitir? El mensaje que recibo ahora es que Firefox no sabe cómo abrir esta dirección, porque el protocolo (c) no está asociado a ningún programa. – Tulips

+0

Sí, @ Model.CertificatePath es la ruta real y es la ubicación correcta. Entonces, ¿pensé que solo puedo abrirlo? – Tulips

+0

Dice caracteres no válidos en la ruta cuando escribí lo que sugirió – Tulips

0

Desafortunadamente no se puede determinar dónde se abrirá el PDF, principalmente porque no se puede garantizar que el complemento Adobe Acrobat Reader esté instalado o funcione.

En teoría, podría abrir una nueva ventana, y en esa nueva ventana tener una función JavaScript para abrir el archivo PDF, pero nuevamente no puede garantizar que se abrirá en una ventana incrustada sin el complemento, lo mejor que pueda esperanza es "mejor intento".

+0

Sí, sé que el complemento PDF está allí. Así que iría por mi mejor intento. ¿Cómo puedo hacer eso? Mi navegador dice – Tulips

+0

Firefox no sabe cómo abrir esta dirección, porque el protocolo (c) no está asociado a ningún programa. – Tulips

0

Puede hacer que el enlace desencadene un método como el siguiente que luego transmitirá el archivo elegido a la descarga del archivo en lugar de abrir el pdf en el navegador.

/// <summary> 
/// Forces a file to be displayed to the user for download. 
/// </summary> 
/// <param name="virtualPath"></param> 
/// <param name="fileName"></param> 
public static void ForceDownload(string virtualPath, string fileName) 
{ 
    HttpResponse response = HttpContext.Current.Response; 
    response.Clear(); 
    response.AddHeader("content-disposition", "attachment; filename=" + fileName); 
    response.WriteFile(virtualPath); 
    response.ContentType = ""; 
    response.End(); 
} 
5

Tratar como este en su Ver

@Html.ActionLink("View", "ViewPDF", new { target = "_blank" }) 

Ahora El enlace se abrirá en una nueva ventana. Puede escribir los bytes de pdf en el método de controlador ViewPDF

Cuestiones relacionadas