从javascript上传/流式传输大型base64字符串到Mvc的正确方法是什么?

时间:2012-07-14 17:37:02

标签: jquery asp.net-mvc-3

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

感谢。

1 个答案:

答案 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数据”或二进制文件,你应该没问题。