Как получить Base64 из ajax Post?

Я пытался получить сообщение base64 в моем веб-методе codebehind, но похоже, что каждый раз, когда я включаю base64, я получаю сообщение об ошибке: сервер ответил статусом 500 (внутренняя ошибка сервера) - он продолжает нажимать функцию ошибки. Сообщение работает с другими строками, когда base64 не включен в передаваемые данные.

function event_create() {
        alert("alert test : function works => onclick");

        function getBase64(file) {
            var reader = new FileReader();
            reader.readAsDataURL(file);
            reader.onload = function () {
                console.info(reader.result);
            };
            reader.onerror = function (error) {
                console.info('Error: ', error);
            };
        }


        var eventTitle = $("#eventTitle").val();
        var eventDesc = $("#eventDesc").val();
        var eventTimeStart = $("#eventTimeStart").val();
        var eventTimeEnd = $("#eventTimeEnd").val();
        var eventDateStart = $("#eventDateStart").val();
        var eventDateEnd = $("#eventDateEnd").val();
        var eventType = $("#eventType").val();
        var eventPlace = $("#eventPlace").val();
        var eventAttendee = document.getElementById("lblSelected").innerText;
        var userID = sessionStorage.getItem("userID");
        var imageBase64 = getBase64(document.getElementById('test').files[0]);

        var data = { 'eventTitle': eventTitle, 'eventDesc': eventDesc, 'eventPlace': eventPlace, 'eventType': eventType, 'eventAttendee': eventAttendee, 'userID': userID, 'imageBase64': imageBase64};
        $.ajax({
            type: "POST",
            async: true,
            contentType: "application/json; charset=utf-8",
            url: ".../../../../Operation/insert.aspx/createEvent",
            data: JSON.stringify(data),
            datatype: "json",
            success: function (result) {

                if (result.d <= 0) {
                    //false alert something 
                    alert("FALSE");
                }
                else if (result.d > 0) {
                    //true
                    alert(result.d);
                }
                else {
                    alert("sent but no call-back");
                }
                console.info(result);
            },
            error: function (xmlhttprequest, textstatus, errorthrown) {
                alert(" connection to the server failed ");
                console.info("error: " + errorthrown);
            }
        });

    }

Вот веб-метод, который получит сообщение

 [WebMethod(EnableSession = true)]
public static string createEvent(string eventTitle, string eventDesc, string eventPlace, string eventType, string eventAttendee, string userID, string imageBase64)
{
    String orgID = (String)HttpContext.Current.Session["orgID"];
    string response = orgID;


    string path = HttpContext.Current.Server.MapPath("~/Users/Organizer/organizerData/"); // de path


    //Check if directory exist
    if (!Directory.Exists(path))
    {
        Directory.CreateDirectory(path); //Create directory if it doesn't exist
    }


    string imageName = "event1" + ".jpg";// for instance

    //set the image path
    string imgPath = Path.Combine(path, imageName);

    byte[] imageBytes = Convert.FromBase64String(imageBase64);

    File.WriteAllBytes(imgPath, imageBytes); //write the file in the directory 


    return imageBase64;
}

Прежде чем мы сможем помочь с отладкой, вам необходимо получить исключение actall. В частности, нам нужны: Type, Message и Stacktrace. Exception.ToString () - простой способ получить это. По соображениям безопасности веб-серверы не передают сведения об исключении в своем ответе HTML. В конце концов, они могут содержать конфиденциальные данные, такие как логины. Или даже такие вещи, как запрос SELECT, который просто потерпел неудачу, что очень важно для получения имен таблиц для SQL-инъекций.

Christopher 16.10.2018 00:53

Я полагаю, это связано с тем, что URL-адрес данных может иметь больше, чем просто содержимое файла в качестве Base64; он также может иметь тип носителя и строку «; base64,». См. MDN. Это также может быть стандартная проблема, описанная в Как мне вернуть ответ от асинхронного вызова?, поскольку чтение файла является асинхронным (прямо сейчас getBase64 возвращает undefined).

Heretic Monkey 16.10.2018 00:55
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
2
117
0

Другие вопросы по теме