什么是上传可变大小的文件(无论是非常大还是非常小)到ASP.NET MVC 2应用程序文件系统的最佳方法?
目前我了解到有两种方式可以处理这个问题(假设文件可能很大或很小):
(1) 通过"Request.Files"或"HttpPostedFileBase"在控制器操作中处理上传,但会花费很长时间,因为ASP.NET将文件加载到活动内存中。
(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或AsyncController吗?我需要手动获取另一个线程吗?
谢谢大家。我知道这是很多问题,并且可能反映了对某些事物的一般理解不足。关于一般缺乏理解的有趣事情是,有这种缺乏理解的人也往往缺乏他们缺乏什么样的理解...因此,如果任何人在这方面指引我方向,我将不胜感激。
目前我了解到有两种方式可以处理这个问题(假设文件可能很大或很小):
(1) 通过"Request.Files"或"HttpPostedFileBase"在控制器操作中处理上传,但会花费很长时间,因为ASP.NET将文件加载到活动内存中。
(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或AsyncController吗?我需要手动获取另一个线程吗?
谢谢大家。我知道这是很多问题,并且可能反映了对某些事物的一般理解不足。关于一般缺乏理解的有趣事情是,有这种缺乏理解的人也往往缺乏他们缺乏什么样的理解...因此,如果任何人在这方面指引我方向,我将不胜感激。