Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 在同一页上下载和/或查看.pdf_Html_Iis_Anchor_Mime_Content Disposition - Fatal编程技术网

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

Html 在同一页上下载和/或查看.pdf,html,iis,anchor,mime,content-disposition,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"&

我使用的是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中添加一些内容


谢谢

如果要强制执行,可以在服务器端执行。我不确定您使用的是webforms还是mvc,但无论哪种方式,您都可以在服务器端的标题中添加如下内容:

AddHeader(“内容处置”、“附件;文件名=whatevernamehere.pdf”)

这将强制浏览器作为附件下载。您只需对“下载”链接执行此操作,而不必使用“查看”链接(在浏览器中查看)


希望有帮助

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

我的第一步是在名为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;}}
}

使用制度;
使用System.Web;
公共类文件下载:System.Web.IHttpHandler
{
公共void ProcessRequest(HttpContext上下文)
{
HttpResponse r=context.Response;
字符串文件名=context.Request.QueryString[“文件”];
r、 AddHeader(“内容处置”、“附件;文件名=“+filename”);
r、 ContentType=“应用程序/八位字节流”;
r、 WriteFile(context.Server.MapPath(文件名));
}
公共布尔可重用{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>


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

我问过关于右键单击-->另存为的问题,他们不感兴趣;)在下面发布了我的整个解决方案。请注意,如果您的文件名包含不允许出现在无引号的名称中的字符,例如逗号或空格,则该代码将失败。