【发布时间】:2012-08-25 05:06:24
【问题描述】:
我正在使用 asp.net 4 (c#)。 我在 Html 5 画布上有一个绘图应用程序,能够添加图像和绘制多种颜色。 我想将绘制的图像保存到 .png 文件。 为此,我构建了一个 WebMethod:
[WebMethod(EnableSession = true)]
public static void UploadImage(string imageData,string name)
{
System.Diagnostics.Debug.WriteLine("here friend!");
}
现在页面上有一个按钮,我用javaScript来调用这个方法:
function trySend()
{
var image = document.getElementById("drawCanvas").toDataURL("image/png");
image = image.replace('data:image/png;base64,', '');
var name = document.getElementById("userName").value;
$.ajax(
{
type: 'POST',
url: 'CanvasSave.aspx/UploadImage',
data: '{ "imageData" : "' + image + '" ' + ', "name" : "' + name + '"}',
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function (msg) {
location.href = '<%= Page.ResolveUrl("~/ShowCards.aspx") %>';
}
});
}
问题是,如果我在画布上绘制一个简单的绘图(一些线条或一个小圆圈),它就可以完美地工作。 即使我有 1 个“邮票”(即图像),它仍然有效。
如果我画一个“复杂”的图像(不是很复杂!只是用不同颜色的划痕)或添加 2,3 个图章,它就不起作用。 WebMethod 根本没有被调用,即使我等待了很长时间。
我认为这与图像的大小有关。似乎如果数据的最终大小小于 80 kb(这是我能够保存的图像的最大大小),那么它可以工作,但是如果预期的图像大于这个,我就有问题了。 同样,所有问题都出在 JS 而不是 C# 代码中。
这是我得到的 JavaScript 错误:
POST http://localhost:53751/CanvasSave.aspx/UploadImage 500 (Internal Server Error)
jquery.min.js:4
f.support.ajax.f.ajaxTransport.send jquery.min.js:4
f.extend.ajax jquery.min.js:4
trySend Default.aspx:21
onclick
这个问题的原因是什么,我该如何解决?
【问题讨论】:
-
您的服务器上的最大帖子大小限制是多少?根据我的研究,默认 IIS 服务器上似乎有 2MB 的默认限制(Base64 编码可以很高兴地超过)。 bytes.com/topic/asp-classic/answers/…。我通常不使用基于 Windows 的服务器或 ASP。但听起来这就是你的问题所在。
-
我可以更改吗?或缩小图像?而且我每张图片只有 80kb,没有比我的服务器上保存的更晚的图片
-
它可能是帖子大小的限制,但请检查事件查看器以查看您收到的详细错误,因为这 500 是一般错误。
-
这可能不是问题,但是您的一个或多个邮票图像是否有可能是跨域的?向画布添加跨域图像会将画布的
origin-clean标志设置为false,这会使浏览器阻止对toDataURL的调用。 -
@apspilers 即使我根本没有使用 stapms,它仍然会失败。
标签: c# javascript asp.net html canvas