加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-16 04:35:11 所属栏目:asp.Net 来源:网络整理
导读:我正在使用ASP.NET MVC,并且运行时间很长.具体来说,我正在生成一个大PDF供用户下载. 我理解基本概念: 调用Action方法 新线程开始生成进程 返回一个视图,告诉用户正在生成(pdf) 使用AJAX调用服务器并要求进度 完成后,将文件提供给用户下载. 我不完全理解的部
我正在使用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?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读