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); ;
    }

file 引数は常に null です。しかし、firebug では、ブラウザがファイルをサーバーに投稿していることがわかります。どのオブジェクトを使用してファイルをキャッチする必要がありますか?

FormData オブジェクトは古いブラウザではサポートされていませんが、クライアントはすべて最新のブラウザを使用しています。それは問題ではありません。

4

2 に答える 2

1

このようなファイルをアップロードするために ajax POST を使用することはできません。フォームの送信である必要があります。

AjaxUploadifyなどのコンポーネントを見てください。

于 2012-10-09T11:38:15.797 に答える