4

我正在使用 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

这个问题的原因是什么,我该如何解决?

4

1 回答 1

1

正如我在评论中所说,我不是 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 当前是什么:

对 maxJsonLength 默认值的混淆

于 2012-08-30T13:25:39.780 回答