4

我想从 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”的内容类型的帖子?那是什么,我应该在这里使用它吗?

谢谢。

4

1 回答 1

0

只要使用 jQuery 异步发送请求(这是默认设置),它就不会阻塞客户端。

关于“多部分”问题,这很可能是指表单内容类型“多部分/表单数据”

内容类型“multipart/form-data”应用于提交包含文件、非 ASCII 数据和二进制数据的表单。

来源:http ://www.w3.org/TR/html401/interact/forms.html#h-17.13.4

由于您发送的是 base64 内容,它既不是文件,也不是“非 ASCII 数据”或二进制文件,您应该没问题。

于 2012-07-18T20:26:37.660 回答