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

如何通过单个Ajax请求同时向控制器发送文件名与上传文件

问题修复及实现方案

你的代码存在三处核心错误,修改后即可正常运行:

  • 错误1:文件选择器ID引用错误,HTML中文件控件ID为theFile,原有JS中错误使用了questionFile作为选择器,无法获取选中的文件
  • 错误2:FormData用法错误,不能将FormData作为普通JSON对象的属性传递,所有请求参数都需要append到同一个FormData实例中提交
  • 错误3:文件参数键名与后端不匹配,后端接收文件的参数名为file,原有代码中FormData append的键名为upload,导致后端无法识别到上传的文件

修复后的前端JS代码

// 请将这段代码放在上传按钮的点击事件回调中执行
// 前置参数校验(可选,建议添加)
const selectedFile = $('#theFile')[0].files[0];
const customFileName = $("#fileName").val().trim();
if (!selectedFile) {
    alert("请先选择需要上传的文件");
    return;
}
if (!customFileName) {
    alert("请输入自定义文件名");
    return;
}

// 构造FormData提交参数
const formData = new FormData();
formData.append('file', selectedFile);
formData.append('fileName', customFileName);

$.ajax({
    url: '替换为你自己的后端接口地址',
    type: 'POST',
    data: formData,
    cache: false,
    processData: false,
    contentType: false,
    success: function(res) {
        console.log("上传成功", res);
    },
    error: function(err) {
        console.error("上传失败", err);
    }
})

后端代码说明

你提供的后端控制器代码无需修改,只要前端FormData的参数键名和后端方法的入参名file、fileName保持一致,即可正常接收文件和自定义文件名参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 11:06:03