【问题标题】:Upload a file asynchronously to MVC.NET将文件异步上传到 MVC.NET
【发布时间】:2016-03-04 06:28:58
【问题描述】:

我想将文件从网页异步上传到 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“文件”参数为空)。谁能告诉我我在这里做错了什么?目标是让 HttpPostedFileBase 拥有对文件的引用,以便我可以在服务器上对其进行一些分析并将结果发送回浏览器以呈现给用户。

【问题讨论】:

  • 输入名称不应该等于HttpPostetFileBase名称,即“文件”吗?
  • 服务器是否需要 javascript File 对象? JsonResult public JsonResult AnalyseFile(HttpPostedFileBase file) 是否表明服务器期待 JSON POST
  • @andreasnico 我试过了(将 html 元素名称与参数名称匹配),但没有任何区别。
  • @guest271314 不,JsonResult 意味着服务器将返回 JSON 给用户代理。

标签: javascript c# ajax asp.net-mvc-4


【解决方案1】:

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

【讨论】:

  • 为了确定,我已将内容类型更改为“multipart/form-data”,但这并没有解决问题。我不确定哪个更好。
  • 在我正在做的项目中,我使用自定义 Json Formatter 。我有以下代码public JsonNetFormatterDecide() : base() { SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("application/json")); SupportedMediaTypes.Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/plain")); } 这是因为我知道我期望 Json 或纯文本作为输入,根据您的媒体类型标头是什么,您必须更改标头值。
猜你喜欢
  • 2014-08-06
  • 2018-07-03
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多