我有一個MVC應用程序。當用戶點擊頁面上的打開按鈕時,我需要打開PDF文件。 PDF存儲的文件路徑是從數據庫中讀取的,它是c:上的一個文件。我如何在我的html代碼中打開它?我有這個代碼:ASP.NET MVC在新窗口中打開pdf文件
<a href="@Model.CertificatePath" target="_blank" class="button3">Open</a>
但是這不能打開我的文件。我需要做什麼?我需要指定的地方,它是一個PDF?
我有一個MVC應用程序。當用戶點擊頁面上的打開按鈕時,我需要打開PDF文件。 PDF存儲的文件路徑是從數據庫中讀取的,它是c:上的一個文件。我如何在我的html代碼中打開它?我有這個代碼:ASP.NET MVC在新窗口中打開pdf文件
<a href="@Model.CertificatePath" target="_blank" class="button3">Open</a>
但是這不能打開我的文件。我需要做什麼?我需要指定的地方,它是一個PDF?
您將需要提供一個操作的路徑,該操作將接收文件名,解析完整路徑,然後將磁盤上的文件從服務器流式傳輸到客戶端。謝天謝地,客戶端無法直接從服務器的文件系統中讀取文件(除非......您是否建議@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>
注意某些瀏覽器可能具有安全設置不允許您打開本地文件。
你可以讓鏈接觸發一個方法,如下面的方法,然後將你選擇的文件流式傳輸到文件下載,而不是在瀏覽器中打開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();
}
嘗試像這樣在你的瀏覽
@Html.ActionLink("View", "ViewPDF", new { target = "_blank" })
現在鏈接將在新窗口中打開。您可以使用ViewPDF控制器方法編寫pdf字節
我該在哪裏解析路徑以及如何流式傳輸?我現在得到的消息是Firefox不知道如何打開這個地址,因爲協議(c)沒有與任何程序關聯。 – Tulips
是的,@ Model.CertificatePath是實際的路徑並且是正確的位置。那麼,我以爲我可以打開它? – Tulips
當我輸入你建議的內容時,它在路徑中顯示無效字符 – Tulips