我在服务器上生成了一个 5MB 的 MemoryStream,它需要作为 excel 文件提供给用户。
我使用 Response.close 使其可下载。但可以肯定的是,它将中止页面上的所有请求/响应。
我知道使用下载页面可能会对线程有所帮助,但是如何将 MemoryStream 传递到下载页面?通常它应该将文件 URL 传递到该页面。
更多评论: 1. 首先,我想将文件流式传输到客户端。要使其成为下载属性,可以使用它来代替 Response.close()。 2. 其次,在客户端下载过程中,我想显示一个处理栏(只是一个图像)。 Response.close 将停止 JavaScript 函数以隐藏该栏。
无论如何,谢谢。困难在于,在
Response.End
或 CompleteRequest
之后,Http 标头已发送。我将无法访问前端的任何内容。我真的应该使用一个单独的页面来处理流程逻辑并用于下载文件。
你的问题有点不清楚。你问如何在不结束响应的情况下结束响应。您的意思是您希望在响应刷新到客户端后运行其余代码吗?或者您对实际响应不正确有疑问?
使用 Response.Close() 可能会出现问题,因为它基本上会重置与客户端的 HTTP 连接。请参阅此 MSDN 博客文章 和 MSDN Response.Close() 参考。
如果您可以更详细地描述您遇到的问题,我可以更新我的答案。
生成 Excel 文件的逻辑应该在其自己的单独页面或处理程序上吗?
为了实现第二个目标,需要一个基于会话的对象(保存生成的文件的大小),该对象可以在下载文件的生成过程中定期和异步更新。然后,可以通过需要从保存进度条的页面定期发送的 AJAX 请求来读取该对象,然后您可以抓取该对象来更新前端的进度条。
只是一个想法,不确定是否有效。如果你用谷歌搜索 AJAX 进度条,你可以找到几个例子。 希望有帮助