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

问题描述 投票:0回答:3

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

我使用 Response.close 使其可下载。但可以肯定的是,它将中止页面上的所有请求/响应。

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

有什么想法吗?

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

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

无论如何,谢谢。困难在于,在

Response.End
CompleteRequest
之后,Http 标头已发送。我将无法访问前端的任何内容。我真的应该使用一个单独的页面来处理流程逻辑并用于下载文件。

asp.net browser download stream response
3个回答
0
投票

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

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

如果您可以更详细地描述您遇到的问题,我可以更新我的答案。


0
投票

生成 Excel 文件的逻辑应该在其自己的单独页面或处理程序上吗?


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

只是一个想法,不确定是否有效。如果你用谷歌搜索 AJAX 进度条,你可以找到几个例子。 希望有帮助


© www.soinside.com 2019 - 2024. All rights reserved.