2

私は .NET MVC 3 プロジェクトで AJAX ファイルのアップロードにしばらく苦労しており、調査中にいくつかの問題を発見しました。

まず第一に、スタック オーバーフローには、AJAX 経由でファイルをアップロードできないという質問がかなりあるようです。これらの回答はすべて XMLHttpRequest レベル 2 仕様より前のものだと思いますが、今更新することをお勧めします。

現在の質問を尊重して、コントローラーへのアップロードを管理しようとしていますが、HttpPostedFileBase を使用してアップロードされたファイルを読み込むことができないため (通常の形式のファイルで行うように)、かなり苦労しています。アップロード)。

私の質問は...なぜこれが起こるのですか?つまり... AJAX経由でファイルをサーバーに送信すると、フォーム経由で送信したときと同じ情報がPOSTに含まれますね。そして、ファイルはまだ Request.Files にあるのに、なぜコントローラーはその情報をパラメーターとしてコントローラーに渡された HttpPostedFileBase インスタンスにバインドできないのでしょうか?

編集:コメントで提案されているように、AJAXアップロードコードの例を追加します:

$("#uploadButton").click(function () {
    if (window.FormData) {
        var theFile = $('input[type="file"]').get(0).files[0];
        var formData = new window.FormData();
        formData.append("importedFile", theFile);
        $.ajax({ async: false,
            url: $.url("Courses/Import/"),
            type: "POST",
            data: formData,
            cache: false,
            processData: false,
            contentType: "multipart/form-data",
            success: function (res) {
                $("#response").innerHTML = res;
            }
        });
        return false;
    }
});

サーバー側では、コントローラー:

[HttpPost]
public ActionResult Import(HttpPostedFileBase importedFile) {
    //Here importedFile is null, however Request.Files[0] contains the uploaded file.
}
4

0 に答える 0