MVC中的文件上传-小结

By | 2014年2月18日

web开发中,文件的上传是非常基本功能之一。
在asp.net中,通常做法是利用webservice 来接收文件请求,这样做的好处就是全站有了一个统一的文件上传接口,并且根据网站的实际情况,可以将webservice部署到其他服务器上,可以兼容考虑将来的分布存储等等问题。

在MVC中实现文件上传主要有2中方式:
1.普通Controller实现文件上传
2.ApiController实现文件上传

普通Controller实现文件上传
在普通的Controller中实现文件上传时,需要使用到HttpPostedFileBase类 来接收文件。调用HttpPostedFileBase 实例对象的SaveAs()方法,就可以将文件保存在服务器中,示例代码如下:
HTML片段:

Controller中的Action片段:

需要注意2个问题:
1. 注意给form表单加上enctype = “multipart/form-data” 属性,否则会导致Action的参数HttpPostedFileBase 对象接收不到文件。
2. 注意文件大小,IIS中默认上传的文件大小为4MB ,超过这大小的文件需要在修改配置文件。

上传大文件时修改文件大小限制如下:
第一步:asp.net中的文件大小限制

第二步:IIS中文件大小限制

ApiController实现文件上传

通过ApiController来实现文件上传时,不得不参考一下官方文档了,建议先去阅读一下。

我自己在实现Demo时, 开发环境为.net 4.0。
HTML片段:

ApiController代码:

如上代码,区别与官网给出的.net 4.0 版本的代码的。

请注意ReNameMultipartFormDataStreamProvider 为自定义类,继承自MultipartFormDataStreamProvider, 这个累的目的就是对上传上来的文件在保存到服务器时,保留文件的扩展名。MultipartFormDataStreamProvider类默认保存的文件是没有扩展名称的。当然我自己这里实现的方式的确挺土的,演示Demo明白思议即可,呵呵。

到这里就差不多了,后面准备实现Ajax+SingR来实现文件上传时显示上传进度的Demo。

参考资料:
Confusing required maxRequestLength and maxAllowedContentLength settings

http://forums.iis.net/t/1169846.aspx

关于MVC4.0 WebAPI上传图片重命名以及图文结合

http://www.cnblogs.com/ang/archive/2012/10/24/2634176.html

ASP.NET Web Api Self Host大文件上传功能

http://www.cnblogs.com/fenglin1985/archive/2013/01/29/2879926.html

发表评论