asp.net-mvc – 将返回文件的长时间运行进程

前端之家收集整理的这篇文章主要介绍了asp.net-mvc – 将返回文件的长时间运行进程前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在使用ASP.NET MVC,并且运行时间很长.具体来说,我正在生成一个大PDF供用户下载.

我理解基本概念:

>调用Action方法
>新线程开始生成进程
>返回一个视图,告诉用户正在生成(pdf)
>使用AJAX调用服务器并要求进度
>完成后,将文件提供给用户下载.

我不完全理解的部分是:

>跨越单独的AJAX调用管理线程.我可能需要一些方法来查找正在运行的线程并请求状态.是否有静态上下文我可以保持对线程的引用?我知道HttpContext.Application中的数据缓存,这适合这个吗?
>以及如何呈现完成的文件.我是否创建临时文件并提供下载链接?或者我可以进行返回文件的最终AJAX调用吗?

解决方法

Cashe非常适合这种情况.只有一件事是确保在进程运行时永远不会删除缓存的项目(您可以使用ItemPriority.NotRemovable).

您可以将文件保存在临时文件夹中的磁盘上,也可以将其保留在缓存中一段时间​​(取决于).
我个人不喜欢用文件污染硬盘,所以我会将文件保存在缓存中(在几分钟内使用MediumPriority).但是文件很大并且可以生成经常考虑使用文件系统的数据库.

在客户端上,当最后一个Ajax请求返回结果时(可能看起来像{progress:“100%”,resultUrl:“http://your.url/Where/ToGet/TheFile.aspx?file=GUID-OR-CACHE-KEY”}),您可以将浏览器重定向到提供的URL.
反过来,它将该文件呈现为二进制结果.

客户端重定向可以使用以下Javascript完成:

location.href = response.resultUrl;

顺便说一下,你如何生成PDF? NFOP?

猜你在找的asp.Net相关文章