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