在ASP.Net MVC控制器中捕获ajax文件

时间:2012-10-09 11:32:34

标签: javascript asp.net file-upload asp.net-mvc-4

我想使用ajax将文件上传到ASP.Net MVC控制器

我的JavaScript代码看起来像这样,基本上每次用户更改输入值时,它都会自动将文件上传到控制器

var formdata = false;
if (window.FormData) {
    formdata = new FormData();
}

$('input[name=default_export_filename]').change(function() {
    var i = 0, len = this.files.length, img, reader, file;

    for ( ; i < len; i++ ) {
        file = this.files[i];
        if (file.type.match(/spreadsheet/) || file.type.match(/ms-excel/)) {
            if ( window.FileReader ) {
                reader = new FileReader();
                reader.onloadend = function (e) { 
                    //showUploadedItem(e.target.result, file.fileName);
                };
                reader.readAsDataURL(file);
            }
            if (formdata) {
                formdata.append("default_export_filename", file);
            }
        }   
    }

    if (formdata) {
        $.ajax({
            url: root + mod + '/uploaddef',
            type: "POST",
            data: formdata,
            processData: false,
            contentType: false,
            success: function (res) {
                console.log(res);
            }
        });
    }
});

在控制器端,我无法使用此

捕获该文件
    [HttpPost]
    public ActionResult UploadDEF(HttpPostedFileBase file)
    {
        var jsonData = new
        {
            response = 3
        };

        return Json(jsonData); ;
    }

或者这个

    [HttpPost]
    public ActionResult UploadDEF(FormCollectionfile)
    {
        var jsonData = new
        {
            response = 3
        };

        return Json(jsonData); ;
    }

file参数始终为null。但在firebug中,我可以看到浏览器正在将文件发布到服务器。我应该用什么对象来捕获文件?

我意识到旧浏览器不支持FormData对象,但我的客户端都使用最新的浏览器。所以这不是问题。

2 个答案:

答案 0 :(得分:3)

问题解决了。

事实证明,我不必为控制器的方法提供任何参数。这些文件可通过Request对象获得。

全部谢谢

答案 1 :(得分:1)

您不能使用ajax POST上传这样的文件,必须是表单提交。

查看AjaxUploadify或类似的组件。