私は .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.
}