sma*_*man 6 asp.net-mvc file-upload httpmodule ihttpasynchandler asp.net-mvc-2
上传可变大小文件(非常大或非常小的ASP.NET MVC 2应用程序文件系统)的最佳方法是什么?
这是我到目前为止所理解的:
人们似乎有两种方式来处理这个问题.(我们假设文件可能非常大或非常小)
(1)通过Request.Files或处理控制器动作中的上传HttpPostedFileBase,这似乎有一个缺点,因为ASP.NET将文件加载到活动内存中需要很长时间.
要么
(2)使用HttpModule尽早拦截文件上传,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或AsyncController吗?我需要手动抓取另一个线程吗?
非常感谢你们.我知道这是很多问题,可能反映了对某些事情的普遍缺乏理解.普遍缺乏理解的有趣之处在于,拥有它们的人也往往缺乏对缺乏理解的理解......所以,如果有人能指出我在正确的方向上,我会很感激.
如果我没记错的话,从 ASP.NET 2.0 开始,大文件就会被刷新到磁盘,所以即使使用 HttpPostedFileBase 也不应该出现任何内存/性能问题。我不确定 asynccontrollers 是这里的解决方案,asynccontrollers 适用于长时间运行的服务器进程。有关 AsyncControllers 的示例,请参阅http://www.aaronstannard.com/post/2011/01/06/asynchonrous-controllers-ASPNET-mvc.aspx
| 归档时间: |
|
| 查看次数: |
2105 次 |
| 最近记录: |