使用<a>标签强制下载PDF文件

3

我将尝试使用 <a> 标签强制下载 PDF 文件。

这是我的代码:

 <a ID="personal_training_form" class="pdfcalltoaction" OnServerClick="personal_training_form_Click" runat="server">PERSONAL TRAINING FORM</a>

我的代码后端:

public void personal_training_form_Click(object sender, EventArgs e)
{
    Response.Clear();
    Response.ContentType = "application/pdf";
    Response.AppendHeader("Content-Disposition", "attachment; filename=PersonalTrainingForm.pdf");
    Response.TransmitFile("~/programs/PERSONAL_TRAINING_FORM_to_mail.pdf");
    Response.End();
} 

看起来页面只是在刷新,没有文件被下载。

编辑:

所以我尝试将其更改为LinkButton,但仍然出现类似的问题。

<asp:LinkButton ID="personal_training_form" CssClass="pdfcalltoaction" runat="server" OnClick="personal_training_form_Click">Personal Training Form</asp:LinkButton>

4
需要在另一页传输文件。如果这是一个静态文件,您可以在<a>元素上始终放置“download”属性,虽然它不一定被广泛支持,但它将要么下载,要么以其他方式可下载,所以... - Ry-
这是一个静态文件,但是似乎IE/Firefox对下载的支持并不是最好的? - Lilluda 5
尝试将onclick="return false;"放入<a>标签中。 - makim
@sine 这个没有起作用。 - Lilluda 5
嗯,好的,但如果它是一个静态文件,为什么不将“~/programs/…”放在链接的href属性中呢?我认为这应该会启动下载。 - makim
显示剩余5条评论
1个回答

0

试试这个。

public void download_Click(Object sender, EventArgs e)
{
    Response.AddHeader("Content-Type", "application/octet-stream");
    Response.AddHeader("Content-Transfer-Encoding","Binary");
    Response.AddHeader("Content-disposition", "attachment; filename=\"sample.pdf\"");
    Response.WriteFile(HttpRuntime.AppDomainAppPath + @"path\to\file\sample.pdf");
    Response.End();
}

<asp:LinkButton ID="download" runat="server" OnClick="download_Click">Download</asp:LinkButton>

1
玩弄内容类型并不是必要的。application/pdf 完全可以正常工作。 - millimoose
@Lilluda5 这不是我的答案,我只是想指出,在任何支持Content-Disposition的浏览器中,将内容类型设置为没有查看器的东西都是不必要的。虽然你仍然应该尝试一下application/octet-stream的hack,这可能会起作用。(即使它很“丑陋”。) - millimoose

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接