Отправка массива uint8clampedarray через ajax в c # в javaScript после getImageData из Canvas - PullRequest
0 голосов
/ 10 июля 2019

Я создаю подпись на стороне клиента в javaScript и затем пытаюсь отправить результат в код (c#) через ajax.Полученный массив, который я пытаюсь передать, имеет тип uint8clampedarray, и я не могу этого сделать, так как метод кода никогда не срабатывает.Он использует метод загрузки страницы, но не метод SetSignature.

javaScript

var signatureByteArray = signature.getSignatureImage();
    SendArrayViaAjax(signatureByteArray);

function getSignatureImage() {
    return ctx.getImageData(0, 0, canvas.width, canvas.height).data;
}

function SendArrayViaAjax(signatureArray) {
    var sigArray = JSON.stringify( signatureArray);
        $.ajax({
            type: "POST",
            data: { array: sigArray },
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            url: "/Intranet/OHS/SOP/SOPSignOffs.aspx/SetSignature",
            success: function (msg) {
                alert(msg.d + "success");
            },
            error: function (response) {
                alert("an error has taken place");
            }
    });
}

код позади

[WebMethod]
public static string SetSignature(string[] array)
{
    var x = array[2];
    return "success";
}

Мой вопрос: как мне отправить массив как uint8clampedarray через ajax и как мне получить его в c #?Или есть лучший способ?

ctx = canvas.getContext("2d");` 

- вот как я получаю элемент Canvas.Генерация подписи thew работает очень хорошо, просто отправьте ее обратно на C#, что является проблемой.

1 Ответ

0 голосов
/ 10 июля 2019

Решение, которое я нашел, состояло в том, чтобы генерировать данные изображения холста по-другому (по-старому).

Создать изображение иначе

function getSignatureImage() {
    //return ctx.getImageData(0, 0, canvas.width, canvas.height).data;
    var pic = canvas.toDataURL("image/png");
    pic = pic.replace(/^data:image\/(png|jpg);base64,/, "")
    return pic;
} 

И затем AJAX-функция

$.ajax({
    type: "POST",
    data: '{"imageData" : "'+ signatureImage + '" }',
    ....

И затем в коде

public static string SetSignature(string imageData)
{
    string filePath = HttpContext.Current.Server.MapPath("Signature.png");
    using (FileStream fs = new FileStream(filePath, FileMode.Create))
    {
        using (BinaryWriter bw = new BinaryWriter(fs))
        {
            byte[] data = Convert.FromBase64String(imageData);
            bw.Write(data);
            bw.Close();
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...