使用file类型输入时Request.Files.Count始终为0,无法获取上传文件
解决ASP.NET MVC中文件上传时Request.Files.Count始终为0的问题
嘿,我一眼就瞅出问题所在了——你的表单没有正确设置multipart/form-data编码类型!你把EncType = "multipart/form-data"放在了路由参数里,而不是表单的HTML属性中,这就导致浏览器不会以正确的格式发送文件数据,服务器自然接收不到。
修正后的视图代码
你需要调整Html.BeginForm的参数,把编码类型放在表单属性里,同时显式指定POST方法(虽然默认是POST,但写清楚更稳妥):
@using (Html.BeginForm("HandleForm", "Home", FormMethod.Post, new { enctype = "multipart/form-data" })) { <div>上传文件:<input type="file" name="uploadedFile" /></div><br/> <input type="submit" value="提交" /> }
控制器代码优化
其实你不用绕弯子用Request.Files,直接用参数HttpPostedFileBase uploadedFile就能接收文件(只要参数名和input的name属性完全一致就行),这样代码更简洁:
public ActionResult HandleForm(HttpPostedFileBase uploadedFile) { if (uploadedFile != null && uploadedFile.ContentLength > 0) { // 示例:保存文件到服务器的App_Data/Uploads目录 var fileName = Path.GetFileName(uploadedFile.FileName); var savePath = Path.Combine(Server.MapPath("~/App_Data/Uploads"), fileName); uploadedFile.SaveAs(savePath); return Content("文件上传成功!"); } return Content("请选择要上传的文件哦!"); }
额外注意事项
- 务必确保表单用POST方式提交,GET请求根本无法上传文件
- 如果要上传大文件,得修改
web.config调整上传限制:
<system.web> <!-- 单位:KB,这里设置为1GB --> <httpRuntime maxRequestLength="1048576" /> </system.web> <!-- IIS 7及以上版本还需要加这段 --> <system.webServer> <security> <requestFiltering> <!-- 单位:字节,这里设置为1GB --> <requestLimits maxAllowedContentLength="1073741824" /> </requestFiltering> </security> </system.webServer>
内容的提问来源于stack exchange,提问作者Ram Venkat
相关产品推荐
相关产品推荐

