ASP.NET MVC在新窗口中打开pdf文件

时间:2012-06-19 12:31:13

标签: asp.net-mvc pdf

我有一个MVC应用程序。当用户单击页面上的打开按钮时,我需要打开pdf文件。存储pdf的文件路径是从数据库中读取的,它是c:上的文件。如何在我的HTML代码中打开它?我有这段代码:

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

但这不会打开我的文件。我需要做什么?我需要在某处指定它是一个pdf ??

5 个答案:

答案 0 :(得分:10)

您需要提供一个操作路径,该操作将接收文件名,解析完整路径,然后将磁盘上的文件从服务器流式传输到客户端。谢天谢地,网络中的客户端无法直接从服务器的文件系统中读取文件(除非......您是否建议@Model.CertificatePath远程用户的计算机上文件的路径?)

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

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

}

<强>更新

如果@Model.CertificatePath是客户端实际计算机上的位置,请尝试:

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

请注意,某些浏览器可能具有安全设置,因此无法打开本地文件。

答案 1 :(得分:6)

在您的视图中尝试这样做

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

现在Link将在新窗口中打开。您可以在ViewPDF控制器方法

中编写pdf字节

答案 2 :(得分:1)

您可以让链接触发一个方法,例如下面的方法,然后将您选择的文件流式传输到文件下载,而不是在broswer中打开pdf。

/// <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();
}

答案 3 :(得分:0)

很遗憾,您无法决定PDF的打开位置,主要是因为您无法保证安装Adobe Acrobat Reader插件或其运行方式。

你可以在理论上打开一个新窗口,并在那个新窗口中有一个JavaScript函数来打开PDF文件,但你不能保证它会在没有插件的嵌入式窗口中打开,你可以希望最好因为是“最好的尝试”。

答案 4 :(得分:0)

如果您获取路径值并且值在@ Model.CertificatePath

这不会起作用

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

您需要添加此

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

并通过添加此〜来确保您的路径是相对的 例如,如果您的路径是/Content/pdfs/CertificatePath.pdf

它需要看起来像

~/Content/pdfs/CertificatePath.pdf

这应该是使其工作的最简单方法。 希望这会有所帮助。

相关问题