この質問をできるだけ簡単にしようと思います。JQueryを使用してAJAX送信を介して追加のフォームデータを含むファイルをアップロードしたい(ただし、ie 7またはie 8と互換性があり、非同期でもあるため)
送信が JQuery 経由の AJAX 送信でない場合、プロセスは正常に機能します。つまり、次のことを行いました。
- 宣言された CommonsMultipartResolver
- コントローラーでこのハンドラーメソッドを書きました
@RequestMapping(value="/processfileupload", method = RequestMethod.POST) public @ResponseBody String handleFileUpload(UploadForm data, BindingResult result) throws Exception {
....
}
UploadForm は、フォームにバインドした Spring MVC フォーム オブジェクトです。また、Spring の form タグに formObject を次のようにバインドしました: enctype="multipart/form-data" .. など..
私が言ったように、JQuery を介した Ajax 呼び出しを介して行われなければ、完全に機能します。Ajax 呼び出しにしようとすると、ファイルは常に null になります。
これは、JQuery を介した Ajax 呼び出しです。
関数 submitFileUploadViaAjax() {
$.ajax({
url: "processfileupload",
data: $("#file_upload_form").serialize(),
type: "POST",
processData: false,
contentType: false,
success: function(data) {
$(response).html(data);
},
error: function (xhr, ajaxOptions, thrownError) {
if (xhr.readyState == 0 || xhr.status == 0) {
// not really an error
return;
} else {
alert("XHR Status = "+xhr.status);
alert("Thrown Error = "+thrownError);
alert("AjaxOptions = "+ajaxOptions)
}
}
});
}
問題は次のように思われます: data: $("#file_upload_form").serialize(),
同様の問題を抱えている人が formData オブジェクトを使用するための推奨される解決策をいくつか読みましたが、これは IE 7 または IE 8 と互換性がないことを読みました。これは本当ですか?
JQueryファイルアップロードプラグインが機能することも読みました(https://github.com/blueimp/jQuery-File-Upload/wiki/How-to-submit-additional-form-data)が、よくわかりませんフォームデータをフォームオブジェクトにバインドし、それをコントローラーに注入するだけのSpringの優れた方法で、これをSpringに接続できれば。
ファイル (比較的小さい) をアップロードする最良の方法について考えている人はいますか? そして、ほとんどのブラウザと互換性があるソリューションですが、特に ie 7 または ie 8 で動作します (これらのブラウザで動作することが要件です)。
本当にありがとう!
- ロッコ