You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:40:10