从MVC返回延迟流

时间:2015-08-18 10:49:22

标签: c# asp.net-mvc streaming

我有一个MVC操作,当前返回PDF:

return File(File.OpenRead(pdfPath), "application/pdf");

这是一种简化。如果文件存在,那么我们直接进入OpenRead,但在其他情况下,需要首先检索或生成。这部分可能会导致客户端等待HTTP响应的延迟。

我想知道MVC是否有办法立即返回流,但只有在文件可用时才开始写入。

这样,PDF客户端(内置的chromes)将从一开始就显示加载微调器,而不仅仅是在流正在传输时。

1 个答案:

答案 0 :(得分:2)

我不认为可以立即返回流,至少不是在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秒内发送内容,那么您就可以了。