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

ASP.Net Core 6.0中用jQuery提交文件至控制器遇问题求助

问题分析与修复方案

第一个问题:$.post提交时控制器无法接收文件

你用$.post的写法完全错误:

  • $.post默认会把传入的对象序列化为application/x-www-form-urlencoded格式,这种格式根本没法传输文件
  • 你还把FormData对象包装到{files: formData}里,这会导致FormData被转成字符串,彻底丢失文件数据

第二个问题:$.ajax提交时出现FormData相关错误

出现'append' called on an object that does not implement interface FormData错误,大概率是这两个原因:

  1. 没有阻止表单的默认提交行为,页面刷新导致脚本执行中断,formData对象被提前销毁
  2. 回调函数里误用了未定义的response变量(你定义的参数是result)

修复后的完整代码

$("#setting-form").on("submit", function(event) {
  // 必须阻止表单默认提交行为,否则页面会刷新
  event.preventDefault();

  var formData = new FormData();
  var fileInput = document.getElementById('site-error-image-input');
  
  if (fileInput.files.length > 0) {
    var file = fileInput.files[0];
    formData.append("files", file);
    
    $.ajax({
      type: 'POST',
      url: '/Admin/Home/SaveSiteErrorImage',
      data: formData,
      processData: false, // 禁止jQuery处理FormData,否则会破坏文件结构
      contentType: false, // 让浏览器自动设置正确的multipart/form-data请求头
      success: function(result) {
        if (result.trim() !== '') {
          var filePathInput = document.getElementsByName("Settings[64].SettingString")[0];
          filePathInput.value = result; // 用value属性比setAttribute更直接
        }
      },
      error: function(xhr, status, err) {
        // 可以加个错误提示,方便调试
        console.error('上传失败:', err);
      }
    });
  }
});

额外注意事项

  • 确保你的ASP.NET Core控制器路由正确,/Admin/Home/SaveSiteErrorImage能匹配到对应的方法
  • 控制器方法里的IList<IFormFile> files参数名和FormData里的键"files"完全一致,否则无法绑定
  • 如果是单文件上传,也可以用IFormFile file作为参数,对应的FormData键改成"file"

内容的提问来源于stack exchange,提问作者Na...

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 14:35:02