c# - HTML5 Canvas toDataURL ("image/png") 适用于一些绘画,有些则不行,不知道为什么

标签 c# javascript asp.net html canvas

我正在使用 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 当前是多少:

Confusion over maxJsonLength default value

关于c# - HTML5 Canvas toDataURL ("image/png") 适用于一些绘画,有些则不行,不知道为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12197407/

相关文章:

c# - 如何在负载平衡的 Azure 虚拟机上使用 SessionState

c# - 如何使用 .Net (C#) 在服务器端将原始 HTML 转换为 Markdown?

c# - 在每个异常上触发特定的ErrorHandlerAttribute?

javascript - 在 JavaScript 中使用空语句有什么意义?

asp.net - CurrentCulture 在 ASP.net 中错误地默认为 en-US

C#如何将不同按钮的按钮文本设置到同一个文本框

c# - 如何在 C# 中将 UTF-8 转换为字符串

javascript - 如何使用 JavaScript 将数据传递到 LibGDX?

javascript - 在 Quill setHTML 中包含样式

c# - ASP.NET 元素中弹出窗口的全局设置在哪里?