【发布时间】:2019-12-17 05:17:46
【问题描述】:
我正在尝试使用Context.Response.OutputStream.Write 方法从服务器分块下载一个大文件(存储在数据库中)。但是在下载完成之前,我无法浏览该站点,换句话说,直到响应结束。页面上有一个链接,它只是重定向到通用处理程序(*.ashx 文件类型)。
不适合使用Context.Response.OutputStream.TransmiteFile。在另一个线程中下载也不能解决问题。
HttpResponse response = Context.Response;
Int32 chunkSize = AppSettings.DownloadChunkSizeMb * 1024 * 1024;
Int32 filePosition = 0;
// Here some code to fill response headers...
while (filePosition < Metadata.Size) // Metadata is retrieved from the database
{
Byte[] chunk = // Retrieving file chunk from the database...
if (!response.IsClientConnected)
{
break;
}
response.OutputStream.Write(chunk, 0, chunk.Length);
response.Flush();
filePosition += chunk.Length;
}
【问题讨论】:
-
多线程吧!只需在另一个线程上进行下载,这应该可以解决您的问题。
-
@theWongfonSemicolon,感谢您的评论,但我已尝试异步执行此操作,页面仍在等待响应。
-
或者在某些解决方案中重定向到一个白页并且没有任何反应。
-
客户端正在等待响应结束,那么如果我们在服务器端运行一个新线程有什么区别呢?没有区别,因为客户端仍然会等待响应结束,但现在来自另一个线程。
标签: c# asp.net httpresponse outputstream