[英]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.