【发布时间】: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名称,即“文件”吗?
-
服务器是否需要
javascriptFile对象?JsonResultpublic JsonResult AnalyseFile(HttpPostedFileBase file)是否表明服务器期待JSONPOST? -
@andreasnico 我试过了(将 html 元素名称与参数名称匹配),但没有任何区别。
-
@guest271314 不,JsonResult 意味着服务器将返回 JSON 给用户代理。
标签: javascript c# ajax asp.net-mvc-4