【问题标题】:Upload a javascript generated PDF file to server将 javascript 生成的 PDF 文件上传到服务器
【发布时间】:2017-09-14 20:33:32
【问题描述】:

请注意,我上传的是运行时生成的文件,而不是用户提交的文件。这就是我的问题所在,携带该文件并将其发送出去已证明是一个真正的挑战。

我正在使用 PDFMake 生成一个 pdf 文件。我花了很长时间才让这段代码正常工作,tl;博士是我将 pdf doc 信息转换为缓冲区,用该缓冲区创建一个新的 File 对象,将该文件对象附加到 formdata 对象,并将其发送到我的服务器。

代码如下:

    var pdfGen = pdfMake.createPdf(docDef);

    pdfGen.getBuffer(function(buffer){
        var pdf = new File(buffer, "testpdf.pdf", {type: "application/pdf"});
        var data = new FormData();
        data.append('upload', pdf);
        data.append('content-type', 'application/pdf');

        $.ajax({
            method: "POST",
            url: "/index.cfm?action=admin:service.upload_pdf",
            data: data,
            processData: false,
            contentType: false,
            success: function(msg){
                console.log(msg);
            },
            error: function(msg){
                console.log(msg);
            }
        })
    })

问题是我在服务器上获取的文件不是有效的 PDF。应用程序类型列为 application/octet-stream。我将 File 对象推送到 应该 的函数会拒绝除 pdf 之外的所有内容,所以我不确定错误的确切位置。

我已经在这两天了,我很茫然,所以非常感谢任何帮助。

【问题讨论】:

    标签: javascript jquery pdf coldfusion pdfmake


    【解决方案1】:

    您是否尝试过将生成的 PDF 转换为 Base64,然后将结果发送到您的服务器? 这就是我的意思:

    var pdfGen = pdfMake.createPdf(docDef);
    pdfGen.getBase64((data) => {
        PostToServer(data);
    });
    

    来源:https://github.com/bpampuch/pdfmake

    【讨论】:

    • 我的问题是coldfusion不会将Base64字符串作为文件(我正在使用FileUpload函数)。我已经尝试了 dataURL 以及 Base64,coldfusion 不会让我通过它。不过谢谢你的想法!
    • 呃,如果你不使用 FileUpload 怎么办?我的意思是:通过方法 POST 将 Base64 编码的 PDF 发送到您的服务器,就好像它是一个普通字符串一样。然后,使用 ColdFusion 检索该字符串,将其转换为二进制,然后将其写入文件。
    • 该死的聪明,我完全没有想到!我实际上已经用不同的方法解决了它,但那真是太棒了
    • Base64 在这些情况下非常有用。你是怎么解决这个问题的?
    • 好吧,我采纳了您的建议,决定使用 Base64 来构建文件,而不是使用提供的缓冲区。这是一项工作,但我找到了另一个很好的答案,详细说明了如何将 Base64 转换为字节数组,以便文件构造函数读取它。之后上传的文件包含相应的信息!
    猜你喜欢
    • 2011-08-17
    • 2015-07-01
    • 1970-01-01
    • 2019-05-16
    • 2020-01-30
    • 2013-02-27
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    相关资源
    最近更新 更多