从MVC返回延迟的流
本文关键字:延迟 返回 MVC | 更新日期: 2023-09-27 18:08:41
我有一个MVC动作,目前返回一个PDF:
return File(File.OpenRead(pdfPath), "application/pdf");
这是一个简化。如果文件存在,那么我们直接去OpenRead,但在其他情况下,它需要首先被检索或生成。这部分可能会导致客户端等待HTTP响应的大量延迟。
我想知道MVC是否有一种方法可以立即返回流,但只有在文件可用时才开始写入。
这样,PDF客户端(内置chrome)将从一开始就显示加载旋转器,而不仅仅是在流正在主动传输时。
我不认为这是可能立即返回流,至少不是在MVC模型,但你可以返回报头至少让客户端知道的东西来了。下面是一个例子:
public void SO32070323()
{
var file = new FileInfo(@"J:'Projects'XibisAutoGenTests'IansAwesomeSite'private'test.pdf");
Response.AddHeader("Content-Disposition", "inline;filename=somefile.pdf");
Response.AddHeader("Content-Length", file.Length.ToString());
Response.Flush();
Thread.Sleep(5000);
Response.TransmitFile(file.FullName);
}
这种方式发送内容长度和配置,以便客户端知道文件即将到来。您可以稍后发送实际的文件内容。
请注意,大多数客户端可能有一个超时,所以你不能永远等待之前发送的内容。超时时间可能因客户端而异,但我希望如果您可以在30秒内发送内容,您就可以了。