将javascript生成的PDF文件上载到服务器

将javascript生成的PDF文件上载到服务器,javascript,jquery,pdf,coldfusion,pdfmake,Javascript,Jquery,Pdf,Coldfusion,Pdfmake,请注意,我上传的是运行时生成的文件,而不是用户提交的文件。这就是我的问题所在,拿着那个文件并把它一起发送已经证明是一个真正的挑战 我正在使用PDFMake生成一个pdf文件。我花了很长时间才让这段代码正常工作,tl;dr of it是我将pdf文档信息转换为缓冲区,使用该缓冲区创建新的文件对象,将该文件对象附加到formdata对象,并将其发送到我的服务器 代码如下: var pdfGen = pdfMake.createPdf(docDef); pdfGen.getBuffe

请注意,我上传的是运行时生成的文件,而不是用户提交的文件。这就是我的问题所在,拿着那个文件并把它一起发送已经证明是一个真正的挑战

我正在使用PDFMake生成一个pdf文件。我花了很长时间才让这段代码正常工作,tl;dr of it是我将pdf文档信息转换为缓冲区,使用该缓冲区创建新的文件对象,将该文件对象附加到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。应用程序类型列为应用程序/八位字节流。我将文件对象推到的函数应该拒绝除pdf以外的所有内容,因此我不确定错误的确切位置


我已经在这里呆了两天了,我不知所措,所以非常感谢您的帮助

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

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

来源:

我的问题是coldfusion不会将Base64字符串作为文件(我正在使用FileUpload函数)。我已经尝试了dataURL以及Base64,coldfusion不会让我通过它。谢谢你的想法!嗯,如果你不使用文件上传怎么办?我的意思是:通过方法POST将Base64编码的PDF发送到您的服务器,就像它是一个普通字符串一样。然后,使用ColdFusion检索该字符串,将其转换为二进制,然后将其写入一个文件。妈的,这太聪明了,我根本没想到它!实际上,我已经用另一种方法解决了这个问题,但老实说,Base64在这些情况下非常有用。你是如何解决这个问题的?我接受了你的建议,决定使用Base64来构建文件,而不是使用提供的缓冲区。这是一个小工作,但我找到了另一个很好的答案,详细说明了如何将Base64转换为字节数组,以便文件构造函数读取它。之后,上传的文件包含适当的信息!