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

标签 jquery asp.net-mvc-3

我想从 JavaScript 客户端发送一个大的 Base64 字符串(数兆字节)到我们的 Mvc 服务器。目前我们正在使用 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 方面,我们有以下 Controller 代码:

[Authorize, RequireHttp, HttpPost]
public ActionResult SetImage(String aData) {
   // Do something with the data.
   return Json("We got it.");
} 

现在 - 就将数据获取到服务器而言,这似乎在我们的本地主机测试环境中有效。我担心这可能不会以良好的异步和缓冲方式“流式传输”,而是可能会阻止所有内容直到发送为止,而且我没有看到对客户端的“真正”影响,因为它正在运行本地主机。我只是不太了解这里发生的事情。

我希望客户端能够继续使用 Web 应用程序,而不会出现任何阻塞。我的内容类型或者 Mvc 端的参数应该不同吗?我希望这能分块发送。

即使我的方法是正确的,有人可以启发我一些关于幕后发生的事情吗?我看到一些帖子使用了带有“multipart”的内容类型?那是什么?我应该在这里使用它吗?

谢谢。

最佳答案

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

关于“multipart”问题,很可能是指表单内容类型“multipart/form-data”

The content type "multipart/form-data" should be used for submitting forms that contain files, non-ASCII data, and binary data.

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

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

关于jquery - 从 javascript 将大型 Base64 字符串上传/流式传输到 Mvc 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11485916/

相关文章:

javascript - 将新的 FileReader 分配给对象不会触发 Onload

asp.net-mvc - 如何使用 Html.ActionLink 通过 MVC3 指定准确的 URL

asp.net - Windows 身份验证 - 获取当前用户名

c# - 返回带有模型和查询字符串的 View

javascript - Laravel5 使用 Jquery Ajax 分页

javascript - 如何在按键时更新一组文本字段并避免在提交时重置表单?

javascript - fullcalendar 记住用户选项,例如。 cookie 中的月/周/日

javascript - JQuery $.post 函数在 Firefox 中有效,但在 IE 中无效

asp.net-mvc-3 - ELMAH 应用程序名称 : show exceptions logged by another site

jquery - 根据字段值动态生成超链接的查询字符串