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

多文件上传失败但单文件上传正常的技术求助

问题描述

尝试向ASP.NET MVC控制器方法传递多个PDF文件,单文件上传正常,但多文件上传时直接触发AJAX错误回调,请求无法到达控制器。

前端JavaScript代码:

var formData = new FormData();
formData.append("data", JSON.stringify(data));
formData.append("httpPostedFileBase", file1, "ff2.pdf");
formData.append("httpPostedFileBase", file1, "ff1.pdf");
$.ajax({
  type: "POST",
  url: "@Url.Action("GetFiles", "FileUpload")",
  data: formData,
  dataType: 'json',
  contentType: false,
  processData: false,
  success: function () {
    console.log("5");
 },
 error: function () {
   alert('Failure to send request');
 }
});

后端控制器代码:

public ActionResult GetFiles(HttpPostedFileBase[] httpPostedFileBase, string data) {
  try {
    if (Request.Files.Count > 0) {
       // 处理逻辑
    }
    // 其他代码
  }
  catch(Exception ex) {
    // 异常处理
  }
}

解决方案

1. 修正FormData文件传入逻辑

你当前两次添加的是同一个file1对象,若要上传两个不同文件,需传入不同的文件实例:

formData.append("httpPostedFileBase", file1, "ff2.pdf");
formData.append("httpPostedFileBase", file2, "ff1.pdf"); // 使用file2而非file1

如果确实需要重复上传同一文件,需确保文件对象未被读取锁定,建议重新创建文件对象再添加。

2. 补充错误日志排查具体原因

修改AJAX的错误回调,打印详细错误信息,直接定位问题根源:

error: function (xhr, status, err) {
  console.error("请求失败详情:", status, err);
  console.error("响应内容:", xhr.responseText);
  alert(`请求失败: ${err}`);
}

常见的错误原因包括请求大小超限、参数绑定不匹配等。

3. 调整ASP.NET请求大小限制

多文件总大小超过默认限制时,IIS会直接拦截请求,无法到达控制器。在web.config中添加或修改以下配置:

<!-- 针对传统ASP.NET配置,单位KB,示例为100MB -->
<system.web>
  <httpRuntime maxRequestLength="102400" executionTimeout="3600" />
</system.web>

<!-- 针对IIS7+的配置,单位Bytes,示例为100MB -->
<system.webServer>
  <security>
    <requestFiltering>
      <requestLimits maxAllowedContentLength="104857600" />
    </requestFiltering>
  </security>
</system.webServer>

4. 验证参数绑定规则

确保FormData中的键名httpPostedFileBase与控制器的数组参数名完全一致,ASP.NET MVC会自动将同名的多个表单项绑定为数组。另外,可尝试通过Request.Files直接读取文件,绕开参数绑定问题:

public ActionResult GetFiles(string data) {
  try {
    if (Request.Files.Count > 0) {
      for (int i = 0; i < Request.Files.Count; i++) {
        HttpPostedFileBase file = Request.Files[i];
        // 处理单个文件
      }
    }
    return Json(new { success = true });
  }
  catch(Exception ex) {
    return Json(new { success = false, message = ex.Message });
  }
}

内容的提问来源于stack exchange,提问作者Jane Doe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 14:27:23