首页 > 解决方案 > canvas.toDataURL("image/jpeg") 的 Javascript ajax 发布到 asp.net 网络表单

问题描述

javascript ajax 代码:

var dataURL = canvas.toDataURL("image/jpeg");
var xhr = new XMLHttpRequest();
xhr.open("POST", "myPage.aspx", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");

xhr.onreadystatechange = function () {
        if (xhr.readyState != 4) return;
        if (xhr.status != 200) {
            alert("Status: " + xhr.status);
        } else {
            alert(xhr.responseText);
        }
    };

xhr.send("imgData=" + dataURL);

c# myPage.aspx 中的服务器端代码 - 页面加载:

// enctype="multipart/form-data"
string img = Server.UrlDecode(Request.Form["imgData"]);

img = Regex.Match(img, @"data:image/(?<type>.+?),(?<data>.+)").Groups["data"].Value;
//img = img.Replace("data:image/png;base64,", "");
img = img.Trim('\0');
//byte[] bytes = Encoding.UTF8.GetBytes(img);
byte[] bytes = Convert.FromBase64String(img);

最后一个服务器端代码当前总是引发错误。似乎是 base64 转换错误...“System.FormatException:'Base-64 char 数组或字符串的长度无效。'”有什么想法吗?谢谢你。

标签: javascriptc#asp.netajax

解决方案


经过测试和尝试,问题出在javascript编码中......正确的代码是:

xhr.send("imgData=" + encodeURIComponent(dataURL));

谢谢你们 :-)


推荐阅读