将canvas dataURL导出为PDF - 如何? DataURL太长而无法传递给服务器

时间:2012-03-08 23:45:32

标签: javascript jquery ajax canvas data-uri

我的画布表示为base64字符串。我想将此字符串传递给服务器,以便服务器可以使用数据制作PDF文档。

当我尝试将数据传递到服务器时收到414错误:'无法加载资源:服务器响应状态为414(Request-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,然后将该文件流发送回客户端以触发下载是正确的解决方案吗?

供参考 - 数据网址为~105k字符。

1 个答案:

答案 0 :(得分:2)

需要传递大量数据时使用POST请求。 $.ajax默认为GET,因此您需要手动定义类型。

要使用jQuery发送POST请求,您可以使用以下内容:

$.ajax({
    url: 'blah.php',
    type: 'POST',
    data: { DataURL: output },
    datatype: 'json',
    success: function() { ... }
})