【问题标题】:Download and/or View .pdf on the same page在同一页面上下载和/或查看 .pdf
【发布时间】:2012-07-12 17:50:21
【问题描述】:

我正在使用 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>

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

但是有没有这样的安排,两者都住在同一页面上?理想情况下,我希望能够向链接本身或 href 添加一些内容。

谢谢!

【问题讨论】:

  • 我确实询问了右键单击->另存为,但他们不感兴趣;)
  • 在下面发布了我的整个解决方案。

标签: html iis anchor mime content-disposition


【解决方案1】:

如果你想强制它,你可以在服务器端进行。我不确定您使用的是 webforms 还是 mvc,但无论是在服务器端,您都可以在标题中添加类似这样的内容:

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

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

希望有帮助!

【讨论】:

    【解决方案2】:

    我最终接受了别人给我的建议。我的整个解决方案如下。

    我的第一步是在站点的根目录中创建一个处理程序,我称之为 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>
    

    就是这样!有一点回发闪烁,我不希望有,但它可以满足我的需要。感谢秃头程序员的推送。

    【讨论】:

    • 请注意,如果您的文件名包含不带引号的名称中不允许的字符,例如逗号或空格,则该代码将失败。
    猜你喜欢
    • 2012-03-12
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多