在同一页面上下载和/或查看.pdf

时间:2012-07-12 21:29:51

标签: html iis anchor mime content-disposition

我使用的是IIS / asp.net,并要求在同一页面上并排显示两个链接。它们都链接到同一个确切的文件,但有两种不同的行为,一个应该查看文件,另一个应该下载文件。

<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

我在这里看到了一些关于通过MIME类型强制一种行为或另一种行为的提示,或者通过Content-Disposition: attachment

但是,无论如何都有这样的安排,两者都住在同一页面上?我希望理想情况下能够在链接本身或href中添加一些东西。

谢谢!

2 个答案:

答案 0 :(得分:1)

如果你想强制它,你可以在服务器端执行。我不确定你是使用webforms还是mvc,但无论是在服务器端,你可以在标题中添加这样的东西:

Response.AddHeader(“Content-Disposition”,“attachment; filename = whatevernamehere.pdf”);

这会强制浏览器作为附件下载。您只需要为“下载”链接执行此操作,并单独保留“查看”链接(以在浏览器中查看)。

希望有所帮助!

答案 1 :(得分: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。