【问题标题】:Neither getting any error nor html2canvas image is getting saved to server side既没有得到任何错误,也没有 html2canvas 图像被保存到服务器端
【发布时间】:2014-04-28 12:17:25
【问题描述】:

我正在尝试将 html2canvas 图像保存到 asp.net webmethod 中的服务器端代码。为此,我试图通过 jquery ajax click 方法发送参数。客户端代码上的一切都很好,因为我没有得到任何类型错误或警告,但同时我也没有在服务器端获取图像。我试图从很长时间内找出问题,但没有找到方法或发生它的原因。这是我的客户端代码..

 $("#excel").on("click", function (e) {
            e.preventDefault();

            html2canvas($("#placeholder").get(0), {
                onrendered: function (canvas) {

                    var img = canvas.toDataURL().replace(/^data[:]image\/(png|jpg|jpeg)[;]base64,/i, "");

                    $.ajax({
                        type: "POST",
                        url: "Default.aspx/MyMethod",
                        data: "img=" + img,
                        success: function (msg) {
                            alert("Data Saved: " + msg);
                        }
                    });
                }
            });
        });

请大家帮帮我。我完全被这种情况震惊了。 需要救生员。 提前致谢。

这是我的服务器端代码..

[WebMethod]
public static void MyMethod(string img)
{

    string fileNameWitPath = "D:/Kabir/custom_name.png";
    using (FileStream fs = new FileStream(fileNameWitPath, FileMode.Create))
    {
        using (BinaryWriter bw = new BinaryWriter(fs))
        {
            byte[] data = Convert.FromBase64String(img);//convert from base64
            bw.Write(data);
            bw.Close();
        }
    }
}

这是我的网络服务代码..

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment  the following line. 
// [System.Web.Script.Services.ScriptService]
public class WebService : System.Web.Services.WebService {

[WebMethod]
public static void MyMethod(string img)
{
    string path = HttpContext.Current.Server.MapPath("/") + "Test.jpg";
    //string fileNameWitPath = "D:\\Kabir\\custom_name.png";
    using (FileStream fs = new FileStream(path, FileMode.Create))
    {
        using (BinaryWriter bw = new BinaryWriter(fs))
        {
            byte[] data = Convert.FromBase64String(img);//convert from base64
            bw.Write(data);
            bw.Close();
        }
    }
}

}

这在萤火虫中给出了这个错误..

System.InvalidOperationException: MyMethod Web Service method name is not valid.
at System.Web.Services.Protocols.HttpServerProtocol.Initialize()
at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)

为什么会出现这个错误?

【问题讨论】:

  • 这里没有足够的信息来回答您的问题。我不知道您的 ajax 调用在做什么或任何变量。也许查看您正在使用的产品的常见问题解答? html2canvas.hertzen.com/faq.html
  • @onskee 你想要什么信息?需要看我的服务器端代码吗?
  • 如果您希望生成服务器端图像,服务器端代码可能会有所帮助。
  • @onskee 我用服务器端代码更新了我的帖子。请参阅
  • @onskee 请帮我解决这个问题先生,我已经尝试了一切,但无法解决它..

标签: javascript jquery html asp.net ajax


【解决方案1】:

我无法通过调用 ASPX 网络方法来创建图像。一旦我将代码移动到 ASMX Web 服务,它就会创建图像。确保您对该文件夹具有权限,对于 Windows,fileNameWitPath 变量上的正斜杠 (/) 必须是反斜杠 (\)

ASMX

using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.IO;

// To allow this Web Service to be called from script, using ASP.NET AJAX, uncomment the following line.
// <System.Web.Script.Services.ScriptService()> _
[System.Web.Services.WebService(Namespace = "http://tempuri.org/")]
[System.Web.Services.WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[ToolboxItem(false)]
public class WebService1 : System.Web.Services.WebService
{

    [WebMethod()]
    public void MyMethod(string img)
    {
        string path = HttpContext.Current.Server.MapPath("/") + "Test.jpg";
        using (FileStream fs = new FileStream(path, FileMode.Create)) {
            using (BinaryWriter bw = new BinaryWriter(fs)) {
                byte[] data = Convert.FromBase64String(img);
                bw.Write(data);
                bw.Close();
            }
        }
    }
}

脚本

    $("#excel").on("click", function (e) {
        e.preventDefault();

        html2canvas($("#placeholder").get(0), {
            onrendered: function (canvas) {
                var img = canvas.toDataURL().replace(/^data[:]image\/(png|jpg|jpeg)[;]base64,/i, "");

                        $.ajax({
                            type: "POST",
                            url: "WebService1.asmx/MyMethod",
                            data: "img=" + img,
                            success: function (msg) {
                                alert("Data Saved: " + msg);
                            }
                        });
            }
        });

【讨论】:

  • 答案已更新。我用VB编写并通过在线转换器转换。这可能不是 100%。
  • 我在 web 服务中也遇到了错误。请查看我更新的帖子以及我的 web 服务代码和错误描述
  • 搜索 StackOverflow 可以成为你的朋友。 stackoverflow.com/questions/11878064/…
  • 谢谢先生。那个错误已经过去了,但我得到了新的错误,如“System.FormatException:Base-64 char 数组的长度无效。在 System.Convert.FromBase64String(String s) 在 WebService1。 c:\Users\vikas\Desktop\JQPlot\App_Code\WebService1.cs:line 29 中的 MyMethod(String img)
猜你喜欢
  • 2018-05-20
  • 1970-01-01
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
  • 1970-01-01
  • 2018-01-21
相关资源
最近更新 更多