3

我想使用 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); ;
    }

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

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

4

2 回答 2

3

问题已经解决了。

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

谢谢大家

于 2012-10-09T14:10:44.127 回答
1

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

看看像AjaxUploadify或类似的组件。

于 2012-10-09T11:38:15.797 回答