2012-06-19 117 views
7

我有一個MVC應用程序。當用戶點擊頁面上的打開按鈕時,我需要打開PDF文件。 PDF存儲的文件路徑是從數據庫中讀取的,它是c:上的一個文件。我如何在我的html代碼中打開它?我有這個代碼:ASP.NET MVC在新窗口中打開pdf文件

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

但是這不能打開我的文件。我需要做什麼?我需要指定的地方,它是一個PDF?

回答

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> 

注意某些瀏覽器可能具有安全設置不允許您打開本地文件。

+0

我該在哪裏解析路徑以及如何流式傳輸?我現在得到的消息是Firefox不知道如何打開這個地址,因爲協議(c)沒有與任何程序關聯。 – Tulips

+0

是的,@ Model.CertificatePath是實際的路徑並且是正確的位置。那麼,我以爲我可以打開它? – Tulips

+0

當我輸入你建議的內容時,它在路徑中顯示無效字符 – Tulips

0

不幸的是,您不能指定將在哪裏打開PDF,主要是因爲您無法保證安裝Adobe Acrobat reader插件或它的功能。

你可以在理論上打開一個新窗口,並且在新窗口中有一個JavaScript函數來打開PDF文件,但又不能保證它會在沒有插件的嵌入式窗口中打開,你可以希望是「最好的嘗試」。

+0

是的..我知道PDF插件在那裏。所以我會盡我所能。我怎樣才能做到這一點?我的瀏覽器說 – Tulips

+0

Firefox不知道如何打開這個地址,因爲協議(c)沒有與任何程序關聯。 – Tulips

0

你可以讓鏈接觸發一個方法,如下面的方法,然後將你選擇的文件流式傳輸到文件下載,而不是在瀏覽器中打開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(); 
} 
5

嘗試像這樣在你的瀏覽

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

現在鏈接將在新窗口中打開。您可以使用ViewPDF控制器方法編寫pdf字節