Node.js 使用socket.io将文件从字符串发送到浏览器

Node.js 使用socket.io将文件从字符串发送到浏览器,node.js,socket.io,pdfkit,Node.js,Socket.io,Pdfkit,我在node.js项目中使用PDFKit和socket.io,在用户单击前端按钮时生成pdf。如何从这里流式传输或以其他方式将生成的pdf发送给最终用户?我宁愿避免将文件保存到文件系统,如果可以的话,以后不得不删除它。。。希望以某种方式流式传输 socket.on('customerRequestPDF', function(){ doc = new PDFDocument; doc.text('Some text goes here

我在node.js项目中使用PDFKit和socket.io,在用户单击前端按钮时生成pdf。如何从这里流式传输或以其他方式将生成的pdf发送给最终用户?我宁愿避免将文件保存到文件系统,如果可以的话,以后不得不删除它。。。希望以某种方式流式传输

socket.on('customerRequestPDF', function(){              
    doc = new PDFDocument;        

    doc.text('Some text goes here', 100, 100);

    //I could do this but would rather avoid it
    doc.write('output.pdf');

    doc.output(function(string) {
        //ok I have the string.. now what?

    });

});

websocket并不是交付PDF的合适机制。只需使用常规HTTP请求

// assuming Express, but works similarly with the vanilla HTTP server
app.get('/pdf/:token/filename.pdf', function(req, res) {
    var doc = new PDFDocument();
    // ...

    doc.output(function(buf) { // as of PDFKit v0.2.1 -- see edit history for older versions
        res.writeHead(200, {
             'Content-Type': 'application/pdf',
             'Cache-Control': 'private',
             'Content-Length': buf.length
        });
        res.end(buf);
    });
});
现在有一个警告:此PDF库已损坏。从版本0.2.1开始,输出是一个适当的
缓冲区
,但它在内部使用不推荐的
二进制
字符串编码,而不是
缓冲区
s。(以前的版本提供了二进制编码字符串。)来自:

“二进制”
-一种仅使用每个字符的前8位将原始二进制数据编码为字符串的方法。此编码方法已被弃用,应尽可能避免使用
缓冲区
对象。此编码将在节点的未来版本中删除


这意味着当node删除二进制字符串编码时,库将停止工作。

websocket并不是交付PDF的合适机制。只需使用常规HTTP请求

// assuming Express, but works similarly with the vanilla HTTP server
app.get('/pdf/:token/filename.pdf', function(req, res) {
    var doc = new PDFDocument();
    // ...

    doc.output(function(buf) { // as of PDFKit v0.2.1 -- see edit history for older versions
        res.writeHead(200, {
             'Content-Type': 'application/pdf',
             'Cache-Control': 'private',
             'Content-Length': buf.length
        });
        res.end(buf);
    });
});
现在有一个警告:此PDF库已损坏。从版本0.2.1开始,输出是一个适当的
缓冲区
,但它在内部使用不推荐的
二进制
字符串编码,而不是
缓冲区
s。(以前的版本提供了二进制编码字符串。)来自:

“二进制”
-一种仅使用每个字符的前8位将原始二进制数据编码为字符串的方法。此编码方法已被弃用,应尽可能避免使用
缓冲区
对象。此编码将在节点的未来版本中删除


这意味着,当节点删除二进制字符串编码时,库将停止工作。

从pull请求开始,
doc.output
现在返回一个缓冲区而不是二进制字符串。@devongovet,感谢更新。然而,我注意到二进制字符串编码仍然在内部使用。这意味着,当节点最终删除对编码的支持时,库将中断。从pull请求开始,
doc.output
现在返回一个缓冲区而不是二进制字符串。@devongovet,感谢您的更新。然而,我注意到二进制字符串编码仍然在内部使用。这意味着当节点最终删除对编码的支持时,库将中断。