将文件异步上传到 MVC.NET

本文关键字:MVC NET 文件 异步 | 更新日期: 2023-09-27 18:37:23

我想将文件从网页异步上传到 ASP.NET MVC 操作:

[HttpPost]
public JsonResult AnalyseFile(HttpPostedFileBase file)
{
  // do stuff
  return Json(someResultObjects);
}

我的问题是,当该方法在服务器上执行时,文件参数为空。

在 HTML 土地上,我有一个包含文件的输入字段:

<input type="file" accept=".xlsx" required="required" id="FileInput" name="FileInput" onchange="javascript:AnalyseFile();" />

我有一些JavaScript代码:

function AnalyseFile() {
  var fileInput = document.getElementById('FileInput');
  var file = fileInput.files[0];
  var url = 'http://someserver/somecontroller/AnalyseFile';
  var xhr = new XMLHttpRequest();
  xhr.upload.onreadystatechange = function() {
    if(xhr.readyState == 4) {
      // do stuff
    }
  };
  xhr.open('POST', url, true);
  xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
  xhr.send('file=' + file);
}

我已经通过在var file = fileInput.files[0]之后插入以下代码行来验证javascript文件对象是否具有对该文件的引用:

alert(file.Name);

这将在消息框中正确显示文件名。

但是,当调用服务器端方法时,文件本身丢失(HttpPostedFileBase "file" 参数为 null)。谁能告诉我我在这里做错了什么?目标是让 HttpPostedFileBase 具有对文件的引用,以便我可以在服务器上对其进行一些分析,并将结果发送回浏览器以呈现给用户。

将文件异步上传到 MVC.NET

您可以允许 Mediatype 标头在服务器端接受 'application/x-www-form-urlencoded'默认格式化程序可能不支持"application/x-www-form-urlencoded",因此文件为空。