我想从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测试环境中工作。我担心这可能不是以一种很好的异步和缓冲方式“流式传输”,而是可能阻止所有内容直到它被发送,并且我没有看到对客户端的“真实”影响,因为它运行localhost。我对这里发生的事情还不太了解。
我希望客户端能够继续使用Web应用程序,而不会阻止所有内容。我的内容类型应该是不同的,还是我在Mvc方面的参数?我希望这会以大块的形式发送。
即使我的方法是正确的,有人可以告诉我一些幕后发生的事情吗?我一直在看一些使用带有“multipart”的内容类型的帖子?那是什么,我应该在这里使用它吗?
感谢。
答案 0 :(得分:0)
只要使用jQuery异步发送请求(这是默认设置),它就不应该阻止客户端。
关于“多部分”问题,很可能是指表单内容类型“multipart / form-data”
内容类型“multipart / form-data”应该用于提交包含文件,非ASCII数据和二进制数据的表单。
来源:http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4
由于你发送的是base64内容,既不是文件,也不是“非ASCII数据”或二进制文件,你应该没问题。