javascript クライアントから Mvc サーバーに大きな base64 文字列 (数メガバイト) を送信したいと考えています。現在、Ajax を使用して、次のような文字列を送信しています。
Upload = function (aUrl, aFormData, aOnProgress, aOnSuccess, aOnTimeout, aOnError) {
var settings = {
url: aUrl,
type: "POST",
contentType: "application/json; charset=utf-8",
data: JSON.stringify(aFormData), // { aData: longBase64String }
success: function (resultObject, textStatus) {
if (textStatus == "success" && aOnSuccess) aOnSuccess(resultObject);
},
error: function (jqXHR, textStatus, errorThrown) {
if (textStatus == "timeout" && aOnTimeout) aOnTimeout();
else if (textStatus == "error" && aOnError) aOnError();
}
};
settings.xhr = function () {
var req = new XMLHttpRequest(); // Create xml http request.
if (req) req.addEventListener('progress', aOnProgress, false); // Upload progress.
return req;
}
return $.ajax(settings);
}
aFormData は、単純に base64 文字列を含む Json オブジェクトを取得しています: { aData: myString }
.
Mvc 側には、コントローラー用の次のコードがあります。
[Authorize, RequireHttp, HttpPost]
public ActionResult SetImage(String aData) {
// Do something with the data.
return Json("We got it.");
}
現在、サーバーにデータを取得する限り、これはローカルホストのテスト環境で機能しているようです。私は、これが非同期でバッファリングされた素敵な方法で「ストリーミング」されていない可能性があることを懸念していますが、送信されるまですべてをブロックする可能性があり、localhost を実行しているため、クライアントに「実際の」影響が見られません。私はここで何が起こっているかについて十分に知りません。
すべてがブロックされることなく、クライアントが Web アプリケーションを引き続き使用できるようにしたいと考えています。コンテンツ タイプを変更する必要がありますか、それとも Mvc 側のパラメーターを変更する必要がありますか? これがまとまって送信されることを願っています。
私のアプローチが正しいとしても、誰かがここで舞台裏で何が起こっているかについて少し教えてもらえますか? 「マルチパート」を含むコンテンツ タイプを使用する投稿を見たことがありますか? それは何ですか、ここで使用する必要がありますか?
ありがとう。