使用响应将流下载到浏览器.关闭/ .end,如何避免中止其余的响应



我在服务器上生成了一个5MB的MemoryStream,它需要作为excel文件提供给用户。

我使用了Response。接近到可以下载。但可以肯定的是,它会中止页面上的所有请求/响应。

我知道使用下载页面可能有助于线程,但是我如何将MemoryStream传递到下载页面?通常,它应该将文件URL传递给该页面。

任何想法?

更多的评论:1. 首先,我想流式传输文件到客户端。要使其成为下载属性,可以使用该属性代替Response.close()。2. 其次,在客户端下载期间,我想显示一个处理栏(只是一个图像)。响应。close将停止JavaScript函数来隐藏栏。

那么如何实现这两个要求呢?由于

谢谢。困难的是,在Response.EndCompleteRequest之后,Http头已经发送。我将无法访问前端的任何内容。我真的应该使用一个单独的页面来处理进程逻辑以及用于下载文件。

你的问题有点不清楚。你问如何在不结束回应的情况下结束回应。您的意思是希望在将响应刷新到客户端后运行其余代码吗?还是你对实际反应不正确有意见?

使用Response.Close()可能会有问题,因为它基本上重置了到客户端的HTTP连接。请参阅此MSDN博客文章和MSDN Response.Close()参考。

如果你能更详细地描述你的问题,我可以更新我的答案。

查看Response.Flush();

同样,参见:http://blogs.msdn.com/b/aspnetue/archive/2010/05/25/response-end-response-close-and-how-customer-feedback-helps-us-improve-msdn-documentation.aspx

生成excel文件的逻辑应该是在它自己单独的页面或处理程序?


为了实现第二个目标,它需要一个基于会话的对象(保存所生成文件的大小),可以在生成下载文件期间定期异步更新。然后对象可以被AJAX请求读取,这个请求需要从保存进度条的页面定期发送,然后您可以获取它来更新前端的进度条。

只是一个想法,不确定它是否有效。如果您搜索AJAX进度条,您可以找到几个示例。希望能有所帮助

相关内容

  • 没有找到相关文章

最新更新