上传可变大小的文件(对于 ASP.NET MVC 2 应用程序文件系统来说非常大或非常小)的最佳方法是什么?
到目前为止我的理解是这样的:
人们似乎有两种处理这个问题的方法。 (假设文件可能非常大或非常小)
(1) 在控制器操作中处理上传Request.Files
or HttpPostedFileBase
,这似乎有一个需要很长时间的缺点,因为 ASP.NET 将文件加载到活动内存中。
or
(2) 使用 HttpModule 尽早拦截文件上传,这以某种方式规避了性能问题。 (我对它的工作原理有点不清楚,但我一直在使用这篇文章http://darrenjohnstone.net/2008/07/15/aspnet-file-upload-module-version-2-beta-1/作为参考)。我不清楚的部分是 ASP.NET 在什么时候将提交的文件加载到活动内存中,以及在模块中拦截该文件实际上如何改变这种行为。
由于第二个选项更快,因此它似乎是更好的选择。但提交上传表单的应用程序似乎可能会有一些与需要保存在数据库中的文件关联的数据。我不想在我的 HttpHandler 或 HttpModule 中进行持久性调用(因为这样我将在不同的地方出现两个非常相似的功能:控制器和 http 处理程序)。
我想一种解决方法是将目标文件位置存储在 HttpContext.Items 中,但是这是最好的方法吗?
最后一个问题是我想在文件上传完成之前渲染 HttpResponse。因此,如果有一个大文件,我将向用户发送一个包含上传状态值的视图,并进行 AJAX 调用以保持状态更新。如何在保持上传过程继续的同时呈现结果?我需要创建 AsyncHandler 或异步控制器吗?我需要手动抓取另一个线程吗?
非常感谢大家。我知道这是很多问题,并且可能反映出人们普遍缺乏对某些事物的理解。关于普遍缺乏理解的有趣之处在于,拥有这些理解的人也往往不了解他们所缺乏的理解……所以,如果有人也能在这方面指出我正确的方向,我将不胜感激。
如果我没记错的话,从 ASP.NET 2.0 开始,大文件就会被刷新到磁盘,所以即使使用 HttpPostedFileBase 也不应该出现任何内存/性能问题。我不确定 asynccontrollers 是这里的解决方案,asynccontrollers 适用于长时间运行的服务器进程。有关 AsyncControllers 的示例,请参见http://www.aaronstannard.com/post/2011/01/06/asynchonrous-controllers-ASPNET-mvc.aspx
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)