c# - 如何强制 <a> 链接到文件触发浏览器中的下载(并且不打开)

标签 c# asp.net download anchor

我知道这可能是一个重复的问题,但我找不到针对我的情况的解决方案。

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

<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>

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

最佳答案

据我所知,仅将一些特殊字符串设置为 <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是文件发送时应具有的名称(可以与原始名称不同)。

关于c# - 如何强制 <a> 链接到文件触发浏览器中的下载(并且不打开),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17962576/

相关文章:

c# - .dll 文件不可访问

c# - .net 中继器与子中继器

asp.net - 如何授权在 Asp.Net MVC 中使用外部登录登录的用户

c# - 使用 download.aspx 时加载图像缓慢

java - 在 Java 中下载 JNLP 文件

c# - 在循环之前检查空的 Enumerable

c# - 在网络中断时使用 Directory.Exists 在网络文件夹上

asp.net - CSS 菜单水平对齐

c# - $.get 函数在 IE 中未调用

javascript - 如何防止 Chrome 阻止 XLSX 下载?