我正在使用 asp.net 4 (c#)。 我在 Html 5 Canvas 上有一个绘图应用程序,能够添加图像和绘制多种颜色。 我想将绘制的图像保存到 .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") %>';
}
});
}
问题是,如果我在 Canvas 上绘制一个简单的绘图(一些线条或一个小圆圈),它就可以完美地工作。 即使我有 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
出现此问题的原因是什么,我该如何解决?
最佳答案
正如我在评论中所述,我不是 ASP/Windows 专家 - 我相信这里的其他人可以澄清,但根据我在网上阅读的内容,您需要在您的服务器上执行以下操作:
Add the following to your web.config or mod the settings in the machine.config
<system.web>
<httpRuntime maxRequestLength="XXXXXX" />
</system.web>
上面应该改变任何请求允许的最大大小,我假设 XXXXX 值需要以字节为单位给出。现在,这是否是唯一要更改的配置设置还有待观察。 PHP 在上传和发布限制方面有两个需要更改的设置。
编辑
为了改变 maxJsonLength
,您需要将以下内容添加到服务器上的 web.config 文件中:
<system.web.extensions>
<scripting>
<webServices>
<jsonSerialization maxJsonLength="5000000">
</jsonSerialization>
</webServices>
</scripting>
</system.web.extensions>
我不清楚默认的 maxJsonLength
是什么,有人说是 2097152 个字符,有人说是 102400 个字符...无论哪个,5000000 应该足够了:)
以下内容可能有助于了解您的 maxJsonLength 当前是多少:
关于c# - HTML5 Canvas toDataURL ("image/png") 适用于一些绘画,有些则不行,不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12197407/