我想从 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 只是采用一个 Json 对象,其中包含 base64 字符串:{ aData: myString }
。
在 Mvc 方面,我们为控制器提供了以下代码:
[Authorize, RequireHttp, HttpPost]
public ActionResult SetImage(String aData) {
// Do something with the data.
return Json("We got it.");
}
现在 - 就将数据发送到服务器而言,这似乎在我们的 localhost 测试环境中工作。我担心这可能不是以一种很好的异步和缓冲方式“流式传输”,而是可能会阻止所有内容,直到它被发送,并且我没有看到对客户端的“真正”影响,因为它正在运行本地主机。我只是不知道这里发生了什么。
我希望客户端能够继续使用 Web 应用程序,而不会出现任何阻塞。我的内容类型应该不同,还是我在 Mvc 端的参数?我希望这将被分块发送。
即使我的方法是正确的,有人可以告诉我幕后发生的事情吗?我一直在看到一些使用带有“multipart”的内容类型的帖子?那是什么,我应该在这里使用它吗?
谢谢。