繁体   English   中英

如何将base64String转换为blob并通过ASP.NET MVC中的ajax发送到controller?

[英]How to convert base64String to blob and send to controller via ajax in ASP.NET MVC?

我是 ajax 的新手,目前我正在使用 ajax 尝试将 base64string 从视图发送到 controller 并获得如下 JsonResult:

$.ajax({
  url: "@Url.Action("UploadSignature", "JobList")",
  type: "POST",
  dataType: "json",
  data: { photoByte: base64String, eventRecordID: "123456" },
  success: function (result) {
              if (result.success === true) {
                 alert("Signature uploaded !");
              }
  },
  error: function (XMLHttpRequest, textStatus, errorThrown) {
                  console.log(XMLHttpRequest);
         }
  });

而我的 controller 方法如下:

[HttpPost]
    public async Task<ActionResult> UploadSignature(string photoByte, string eventRecordID)
    {
         byte[] photoAfterConvert = Convert.FromBase64String(photoByte);
         ...             
         //Upload photoAfterConvert to server
         ...
         return Json(new { success = true });
    }

但是,上面的代码有时不起作用,尤其是当 base64String 太长时。 一旦我调用 ajax,它就会挂起,并且永远不会在 controller 方法中出现 go。 大约1分钟后,会触发错误回调function,消息如下,无意义。

{"readyState":0,"status":0,"statusText":"error"}

因此,我在想有没有其他方法可以通过 ajax 将大字符串数据从视图发送到 controller? 发送 blob 是一个不错的选择吗? 如果是,我如何通过发送 blob 来实现它? 我需要在 controller 参数中输入什么数据类型才能接受 blob?

提前感谢您的帮助。

尝试这个:

function Base62ToBlob (dataURI) {
    'use strict'
    var byteString,
        mimestring

    if (dataURI.split(',')[0].indexOf('base64') !== -1) {
        byteString = atob(dataURI.split(',')[1])
    } else {
        byteString = decodeURI(dataURI.split(',')[1])
    }

    mimestring = dataURI.split(',')[0].split(':')[1].split(';')[0]

    var content = new Array();
    for (var i = 0; i < byteString.length; i++) {
        content[i] = byteString.charCodeAt(i)
    }

    return new Blob([new Uint8Array(content)], { type: mimestring });
}

从客户端调用操作方法:

function FileUploadServer (blob) {   
    var fd = new FormData();
    fd.append("file", blob,  "FileName.png");
    $http.post("URL", fd, {
        headers: { 'Content-Type': undefined }
    })
        .success(function (response, status, headers, config) {
          
          
        });
}

服务器端调用接收方法:

 public ContentResult Upload()
  {
      var files = System.Web.HttpContext.Current.Request.Files;
      return CustJson( null);
   }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM