【问题标题】:Catching ajax file in ASP.Net MVC Controller在 ASP.Net MVC 控制器中捕获 ajax 文件
【发布时间】:2012-10-09 11:32:33
【问题描述】:

我想使用 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 对象,但我的客户都使用最新的浏览器。所以这不是问题。

【问题讨论】:

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


【解决方案1】:

问题解决了。

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

谢谢大家

【讨论】:

    【解决方案2】:

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

    看看AjaxUploadify 或类似的组件。

    【讨论】:

    • @strike_noir 显然出于安全原因它受到限制。 ajax 不允许 multipart/form-data 编码类型。有几种解决方案,大多数使用 iframe,可以解决这个问题
    • 我找到了解决方案,在 ASP.Net MVC 中上传 AJAX 文件可以正常工作,谢谢
    猜你喜欢
    • 2013-11-07
    • 2014-08-28
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    相关资源
    最近更新 更多