javascript - 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 数组或字符串的长度无效。'”有什么想法吗?谢谢你。
解决方案
经过测试和尝试,问题出在javascript编码中......正确的代码是:
xhr.send("imgData=" + encodeURIComponent(dataURL));
谢谢你们 :-)
推荐阅读
- bash - Gcloud 组件未安装在本地计算机上
- c# - 更新基类值,因此所有派生类也会更新
- python - 熊猫列数据作为绘图中的标记?
- javascript - 为数组中的特定项目分配不同的链接
- flutter - 如何对集合进行排序
在 Dart/Flutter 中按字母顺序排列? - angular - ngx-sipper-wrapper 在 angular8 中无法正常工作?
- docker - Docker 构建步骤名称不能以数字开头
- tableau-api - Tableau 地图报告
- java - Arquillian - 所有测试的单一部署
- spring - Spring Batch:在 StoppableTasklets 中实现 stop 方法