【问题标题】:How to upload a file to Controller in conjunction with other parameters?如何结合其他参数将文件上传到Controller?
【发布时间】:2021-10-15 11:00:04
【问题描述】:

我目前将一个文件上传到我的控制器,它工作正常:

在客户端:

var input = document.getElementById(inputId);
var formData = new FormData();
for (var i = 0; i != input.files.length; i++) {
  formData.append("files", files[i]);
}    

$.ajax({
  url: "/api/ocr",
  data: formData,
  processData: false,
  contentType: false,
  type: "POST",
  success: function(data) {...}
});

在控制器的服务器端:

[HttpPost]
public async Task<IActionResult> Post(IList<IFormFile> files) {
  IFormFile file = files[0];
  // process file
}

现在我想向服务器发送另一个参数:connectionId。所以在客户端我添加了:

formData.append("connectionId", "123456");

在服务器端,我将参数修改为 Post 方法:

[HttpPost]
public async Task<IActionResult> Post(IList<IFormFile> files, string connectionId) {
  ...
}

但是,connectionId 参数始终为空。我错过了什么?

【问题讨论】:

    标签: javascript c# jquery asp.net-core .net-core


    【解决方案1】:

    检查您的表单元素是否包含:

    <form enctype="multipart/form-data" method="post">
    

    并尝试将 Form 元素传递给 FormData 构造函数:

    var formData = new FormData(document.getElementById(formId));
    

    如果您的模型绑定区分大小写,请确保 id 也是:

    <input type="text" id="connectionId"
    

    而且在使用浏览器的开发工具点击提交之前,connectionId 输入已被填充到 DOM 中。

    【讨论】:

    • 页面上没有表单。一切都通过ajax调用,因此$.ajax
    • @AngryHacker 没关系,你仍然可以使用$.ajax 发送multipart/form-data 请求。 stackoverflow.com/questions/5392344/…
    猜你喜欢
    • 2019-02-11
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 2012-06-30
    • 1970-01-01
    • 2013-07-16
    相关资源
    最近更新 更多