【问题标题】:Export canvas dataURL as PDF -- how? DataURL is too long to pass to server将画布 dataURL 导出为 PDF - 如何? DataURL 太长,无法传递给服务器
【发布时间】:2012-03-08 23:45:32
【问题描述】:

我将画布表示为 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 约为 105k 个字符。

【问题讨论】:

    标签: javascript jquery ajax canvas data-uri


    【解决方案1】:

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

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

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

    【讨论】:

    • 你能解释一下为什么这会改变事情吗?
    • 除了 URL 之外,POST 请求还可以包含单独的“正文”。 POST 请求中的数据在正文中发送,正文的大小没有查询字符串的限制。通常,PHP 中 POST 正文的默认最大大小约为 8 兆字节。
    猜你喜欢
    • 2011-11-09
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2015-06-21
    • 2014-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多