【问题标题】:ASP.NET MVC open pdf file in new windowASP.NET MVC 在新窗口中打开 pdf 文件
【发布时间】:2018-04-10 02:40:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net-mvc pdf


    【解决方案1】:

    您需要提供接收文件名的操作路径,解析完整路径,然后将磁盘上的文件从服务器流式传输到客户端。幸运的是,Web 中的客户端无法直接从服务器的文件系统中读取文件(除非...您是否建议 @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>
    

    请注意,某些浏览器的安全设置可能不允许您打开本地文件。

    【讨论】:

    • 在哪里解析路径以及如何流式传输?我现在得到的消息是 Firefox 不知道如何打开这个地址,因为协议 (c) 没有与任何程序关联。
    • 是的,@Model.CertificatePath 是实际路径并且是正确的位置。所以,我以为我可以打开它??
    • 当我输入你的建议时,它说路径中的字符无效
    • CertificatePath 的值是多少?
    【解决方案2】:

    在您的视图中尝试这样的操作

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

    现在链接将在新窗口中打开。您可以在 ViewPDF 控制器方法中写入 pdf 字节

    【讨论】:

      【解决方案3】:

      您可以让链接触发一种方法,例如下面的方法,然后将您选择的文件流式传输到文件下载,而不是在浏览器中打开 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();
      }
      

      【讨论】:

        【解决方案4】:

        如果您获得路径值并且该值在 @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

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

        【讨论】:

          【解决方案5】:

          很遗憾,您无法指定打开 PDF 的位置,主要是因为您无法保证安装了 Adob​​e Acrobat 阅读器插件或其运行方式。

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

          【讨论】:

          • 是的..我知道 PDF 插件在那里。所以我会尽力而为。我怎样才能做到这一点?我的浏览器说
          • Firefox 不知道如何打开这个地址,因为协议 (c) 没有与任何程序关联。
          猜你喜欢
          • 2013-04-24
          • 1970-01-01
          • 2014-07-01
          • 2014-05-01
          • 2013-03-07
          • 1970-01-01
          • 2018-03-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多