Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/318.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.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
C# 强制从内存下载文件,支持多次下载_C#_.net_Asp.net - Fatal编程技术网

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

C# 强制从内存下载文件,支持多次下载,c#,.net,asp.net,C#,.net,Asp.net,我正在根据用户输入从服务器动态生成一个文件。我需要提供一个下载按钮,单击该按钮后,将文件下载到用户的文件系统 此外,用户可能会单击同一按钮两次,然后再次下载文件 文件的动态生成排除了HttpResponse.TransmitFile()选项,该选项支持多线程下载 我遇到的几乎所有其他选项都需要调用Response.End(),这会阻止第二次下载 如何满足“多次下载”要求 请阅读虚拟路径提供程序,这可能使我能够使用TransmitFile(),但对于这样一个简单的需求来说,这似乎是一种过度使用。您

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

此外,用户可能会单击同一按钮两次,然后再次下载文件

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

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

如何满足“多次下载”要求


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

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

  • 在用户每次单击下载时重新生成文件
  • 将文件保存到磁盘,然后从那里进行流式处理

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

  • 在用户每次单击下载时重新生成文件
  • 将文件保存到磁盘,然后从那里进行流式处理

  • 从这里得到答案:

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

    <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>
    
    
    无标题页
    var isReload=假;
    函数下载文件()
    {
    如果(isReload==true)
    {
    isReload=假;
    window.location.reload();
    }
    其他的
    {
    isReload=真;
    }
    setTimeout(“DownloadFiles()”,2000);
    }
    
    从这里得到了答案:

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

    <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>
    
    
    无标题页
    var isReload=假;
    函数下载文件()
    {
    如果(isReload==true)
    {
    isReload=假;
    window.location.reload();
    }
    其他的
    {
    isReload=真;
    }
    setTimeout(“DownloadFiles()”,2000);
    }
    
    但TransmitFile不允许浏览器自动检测文件类型并打开下载对话框。什么是“阻止第二次下载”?您的意思是用户单击“同一按钮”两次“。你是说两次单独的点击吗?因为这将导致两个单独的HTTP请求,所以在同一个响应中组合它们似乎是荒谬的。@Kirk Woll是的,我是在暗示用户单击同一按钮两次。不,我不是说合并两个单独的请求,只是在第一次下载完成后再按相同的按钮。Response.End()似乎会终止页面,但它没有响应。但是TransmitFile不允许浏览器自动检测文件类型并打开下载对话框。什么是“阻止第二次下载”?你的意思是用户点击“同一个按钮两次”。你是说两次单独的点击?因为这将导致两个单独的HTTP请求,所以在同一个响应中组合它们似乎是荒谬的。@Kirk Woll是的,我是在暗示用户单击同一按钮两次。不,我不是说合并两个单独的请求,只是在第一次下载完成后再按相同的按钮。Response.End()似乎杀死了页面,但它没有响应。