Как экспортировать dataURL холста в формате PDF? DataURL слишком длинный для передачи на сервер

У меня есть холст, представленный в виде строки base64. Я хотел бы передать эту строку на сервер, чтобы сервер мог создать PDF-документ с использованием данных.

Я получаю сообщение об ошибке 414 при попытке передать данные на сервер: «Не удалось загрузить ресурс: сервер ответил со статусом 414 (слишком длинный URI запроса).

Я успешно загрузил образ на стороне клиента. У меня нет проблем с получением и загрузкой изображения, только с формированием типа файла, в котором оно представлено.

$('#ExportPlanView').click(function (e) {
    //planViewStage.toDataURL(function (e) { window.location = e.replace("image/png", "image/octet-stream")});
    planViewStage.toDataURL(function (dataURL) {
        var output = dataURL.replace(/^data:image\/(png|jpg);base64,/, "");

        $.ajax({
            url: '../PlanView/ExportAsPDF',
            data: { DataURL: output },
            datatype: 'json',
            success: function (stream) { window.location = stream; }
        });
    });
});

Является ли правильным решением разбить вывод на более мелкие фрагменты и отправить каждый фрагмент на сервер, заставить сервер реконструировать эти фрагменты, создать PDF-файл, а затем отправить этот файловый поток обратно клиенту, чтобы инициировать загрузку?

Для справки: URL-адрес данных составляет ~ 105 тыс. символов.


person Sean Anderson    schedule 08.03.2012    source источник


Ответы (1)


Используйте запрос POST, когда вам нужно передать большие объемы данных. $.ajax по умолчанию используется GET, поэтому вам нужно определить тип вручную.

Чтобы отправить запрос POST с помощью jQuery, вы можете использовать что-то вроде этого:

$.ajax({
    url: 'blah.php',
    type: 'POST',
    data: { DataURL: output },
    datatype: 'json',
    success: function() { ... }
})
person Jani Hartikainen    schedule 08.03.2012
comment
Не могли бы вы объяснить, почему это меняет дело? - person Sean Anderson; 09.03.2012
comment
Запрос POST может содержать отдельное тело в дополнение к URL-адресу. Данные в запросе POST отправляются в теле, которое не так ограничено по размеру, как строка запроса. Обычно максимальный размер по умолчанию для тела POST в PHP составляет около 8 мегабайт. - person Jani Hartikainen; 09.03.2012