我怎么能强迫<;a>;指向文件的链接会触发浏览器中的下载(并且不会打开)

本文关键字:下载 浏览器 链接 lt 怎么能 gt 文件 | 更新日期: 2023-09-27 18:25:32

我知道这可能是一个重复的问题,但我找不到解决我的问题的方法。

我正在做的是:我想创建一个页面,网站管理员可以上传文件并对每个文件进行描述,然后用户可以下载这些文件。我创建了一个带有fileupload控件的管理页面,该控件将文件保存在downloads/files中。然后我创建了具有三列的数据库:1-downloadtitle 2-downloadmain 3-name。管理员可以为每个文件输入下载标题和下载主文件(文件描述)。name列将自动填充上传的文件名。现在是我为下载页面所做的(在使用代码隐藏从数据库中获得数据后):

<asp:Repeater ID="downloadsRepeater" runat="server">
    <ItemTemplate>
        <div class="downloadTitle"><%#Eval("downloadtitle") %></div>
        <div class="downloadMain"><%#Eval("downloadmain") %>
            <div class="downloadButtom" dir="ltr"><a href="/Downloads/Files/<%#Eval("name") %>">Download</a></div>
        </div>
    </ItemTemplate>
    <SeparatorTemplate>
        <div class="separator"></div>
    </SeparatorTemplate>
</asp:Repeater>

你可以从上面的代码中了解页面的外观(我不希望下载链接将用户重定向到另一个页面。我希望用户只需点击下载,文件就会下载!)我使用的这种方法适用于文档文件,但不适用于PDF文件!(Pdf文件将由浏览器打开,而不是下载)所以我想知道他们是否是按照我想要的方式来做这件事的一种方式?

我怎么能强迫<;a>;指向文件的链接会触发浏览器中的下载(并且不会打开)

据我所知,仅仅为<a>标记的href属性设置一些特殊字符串是不可能的。

但是,您可以通过用asp.net链接按钮和回发替换链接来获得您想要的行为,在回发中您可以调用以下方法:

public static void DownloadFile(string filename, string path)
{
    Response.ContentType = "application/unknown";
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + filename);
    Response.TransmitFile(path);
    Response.End();
}

path是要发送到客户端的文件的完整路径,filename是文件发送时的名称(可以与原始名称不同)。

使html超链接runat="server"