json Webservice将传递将转换为图像的Base64代码

时间:2013-12-02 09:40:06

标签: json web-services jquery base64

规格:

  • Server 2012
  • Framework 3.5

我已在服务器http://ipaddress/eSignatureWS.asmx?op=SaveImg.

中部署了我的网络服务

问题:当我将ajax dataType更改为“json”或“text”时,它有一个内部服务器错误,但是当我使用“script”时它不会有错误但它不会保存图像。当我在本地尝试它时使用“json”/“text”,但是当我部署它时将不再起作用。

所以这是我的代码:

Jquery的

function signatureSave() {

var canvas = document.getElementById("newSignature"); // save canvas image as data url (png format by default)
var data = canvas.toDataURL("image/png");
var signatureData = data.replace(/^data:image\/(png|jpg);base64,/, "");


var donum = "sampleImg"; //imagename
$.support.cors = true;
//var imgData = JSON.stringify(signatureData);

$.ajax({
    type: "Post",
    async: false,
    url: "http://ipaddress/eSignatureWS.asmx?op=SaveImg",
    data: { "filename": donum, "imgBit": signatureData }, 
    dataType: "json",
    success: function (data) { //alert(data);
        if (data.match("true")) {
            document.getElementById('errorImage').innerHTML = "Successfully Submitted!";
        }
        else {
            document.getElementById('errorImage').innerHTML = "Error occured.";
        }
    },
    error: function (XMLHttpRequest, testStatus, errorThrown) {
        document.getElementById('errorImage').innerHTML = errorThrown;
        alert(XMLHttpRequest + testStatus + errorThrown);
    }
})

web服务

[WebMethod]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string SaveImg(string filename, string imgBit)
    {
        try
        {

            string filepath = WebConfigurationManager.AppSettings["ImgLocation"].ToString();
            string imgPath = filepath + filename + ".png";

            //creates a png image signature
            using (FileStream fs = new FileStream(imgPath, FileMode.Create))
            {
                using (BinaryWriter bw = new BinaryWriter(fs))
                {
                    byte[] data = Convert.FromBase64String(imgBit);
                    bw.Write(data);
                    bw.Close();
                    JavaScriptSerializer js = new JavaScriptSerializer();
                    string strJSON = js.Serialize("true");
                    return strJSON;
                }
            }

        }
        catch (Exception ex)
        {

        }
    }

1 个答案:

答案 0 :(得分:1)

检查编辑部分!

我猜你不知道在ASP.NET中默认设置为100KB的“maxJsonLength”属性。直到我不得不针对同一主题进行最新搜索,我才意识到这一点:)

在Web.Config文件中,您可以根据需要更改此默认限制。

<configuration>
  <system.web.extensions>
    <scripting>
      <webServices>
        <jsonSerialization maxJsonLength="1000000"/>
      </webServices>
    </scripting>
  </system.web.extensions>
</configuration>

那个是1.000.000字节,大约是1MB。如果需要通过Web服务发送更大的文件,可以设置更高的值。

检查一下,如果有效,请告诉我。

编辑:我最近发现这不是你应该做的唯一设置。您还应该在web.config文件中设置httpruntime节点的“maxRequestLength”属性,如:

<system.web>
    <httpRuntime targetFramework="4.5" maxRequestLength="10000" executionTimeout="10800" />
</system.web>

这里,maxRequestLength以KB为单位,因此10000表示~10MB(完全为9,77MB)。如果用户带宽较低且请求长度要求大于10MB,则可以将executionTimeout属性设置为更高的值。这是几秒钟,所以10800意味着3个小时。

我想你在这里得到了照片。

干杯!