强制从内存下载文件,支持多次下载

时间:2011-02-20 21:06:19

标签: c# .net asp.net

我根据用户输入从服务器动态生成文件。我需要提供一个下载按钮,在单击时将文件下载到用户的文件系统。

此外,用户可能会点击两次相同的按钮,文件应该再次下载。

动态生成文件排除了HttpResponse.TransmitFile()选项,该选项支持多个下载。

我遇到的几乎所有其他选项都需要调用Response.End(),这会阻止第二次下载。

如何满足“多重下载”要求?

阅读虚拟路径提供程序,这可能使我能够使用TransmitFile(),但这对于这样一个简单的要求来说似乎有些过分。

2 个答案:

答案 0 :(得分:1)

您可以尝试以下任一方法:

  1. 每次用户点击下载时重新生成文件。
  2. 将文件保存到磁盘,然后从那里流式传输。

答案 1 :(得分:0)

从这里得到答案:

http://www.eggheadcafe.com/tutorials/aspnet/3889fc21-1562-4d1b-89e4-cea5576690b2/refresh-web-pages-after-d.aspx

基本上,它使用客户端脚本在下载后重新加载页面:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
    <script type="text/javascript" language="javascript">
    var isReload = false;
    function DownloadFiles()
    {
        if(isReload == true)
        {
            isReload = false;
            window.location.reload();     
        }
        else
        {
            isReload = true;
        }
        window.setTimeout("DownloadFiles()", 2000);
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Label runat="server" ID="lblMsg"></asp:Label>
        <asp:Button ID="Button1" runat="server" Text="Download" OnClientClick="DownloadFiles();" OnClick="Button1_Click"/>
    </div>
    </form>
</body>
</html>