2012-07-12 59 views
0

我使用的是IIS/asp.net,並且要求在同一頁面上並排放置兩個鏈接。他們都鏈接到相同的確切文件,但有兩種不同的行爲,一個應該查看文件,另一個應該下載文件。在同一頁面上下載和/或查看.pdf

<a title="Specifications" href="/filename.pdf"> 
    <img alt="View Icon" src="/images/viewIcon.jpg" /> 
</a>  
<a title="Specifications" href="/filename.pdf"> 
    <img alt="Download Icon" src="/images/downloadIcon.jpg" /> 
</a> 

enter image description here

我在這裏看到的一些技巧對SO有關強制一個行爲或其他通過MIME類型,或通過Content-Disposition: attachment

但反正是有有這樣的配置,其中兩人住上同一頁?我希望能夠添加一些東西到鏈接本身或href。

謝謝!

+0

我沒有問右鍵點擊 - >另存爲,他們不感興趣;) – hardba11 2012-07-12 21:31:10

+0

張貼我的整個解決方案下面。 – hardba11 2012-07-19 03:24:27

回答

1

如果你想強制它,你可以在服務器端做到這一點。我不確定你是否使用webforms或mvc,但在服務器端的任何一種方式,你可以添加類似這樣的標題:

Response.AddHeader(「Content-Disposition」,「attachment; filename = whatevernamehere .PDF「);

這將強制瀏覽器作爲附件下載。您只需要爲「下載」鏈接執行此操作,並單獨保留「視圖」鏈接(在瀏覽器中查看它)。

希望有幫助!

0

我最終接受了我的建議。我的整個解決方案如下。

我的第一步是在我稱爲fileDownload.ashx的站點根目錄下創建一個處理程序。

<%@ WebHandler Language="C#" Class="fileDownload" %> 
using System; 
using System.Web; 

public class fileDownload : System.Web.IHttpHandler 
{ 
    public void ProcessRequest (HttpContext context) 
    { 
     HttpResponse r = context.Response; 
     string fileName = context.Request.QueryString["file"]; 
     r.AddHeader("Content-Disposition", "attachment; filename=" + fileName); 
     r.ContentType = "application/octet-stream"; 
     r.WriteFile(context.Server.MapPath(fileName)); 
    } 
    public bool IsReusable { get { return false;}} 
} 

下一頁更新鏈接...

<a title="Specifications" href="/filename.pdf"> 
    <img alt="View Icon" src="/images/viewIcon.jpg" /> 
</a>  
<a title="Specifications" href="/fileDownload.ashx?file=/filename.pdf"> 
    <img alt="Download Icon" src="/images/downloadIcon.jpg" /> 
</a> 

完蛋了!有一個回彈閃爍,我寧願沒有,但它做我所需要的。感謝推Bald Programmer。

+0

請注意,如果您的文件名包含未加引號的名稱(如逗號或空格)中不允許的字符,則代碼將失敗。 – 2012-10-11 08:47:24