Dan*_*ell 5 c# asp.net-mvc streaming
我有一个MVC动作,目前返回PDF:
return File(File.OpenRead(pdfPath), "application/pdf");
Run Code Online (Sandbox Code Playgroud)
这是一种简化.如果文件存在,那么我们直接进入OpenRead,但在其他情况下,需要首先检索或生成.这部分可能导致客户端等待HTTP响应的实质性延迟.
我想知道是否有一种方法可以让MVC立即返回流,但只有在文件可用时才开始写入.
这样,PDF客户端(内置的chromes)将从一开始就显示加载微调器,而不仅仅是在流正在传输时.
我认为不可能立即返回流,至少在 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);
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以发送内容长度和配置,以便客户端知道文件即将到来。您可以稍后发送实际的文件内容。
请注意,大多数客户端可能会出现超时,因此您不能永远等待才能发送内容。每个客户端的超时时间可能有所不同,但我希望如果您可以在 30 秒内发送内容,那就没问题。
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |