Node.js 使用socket.io将文件从字符串发送到浏览器
我在node.js项目中使用PDFKit和socket.io,在用户单击前端按钮时生成pdf。如何从这里流式传输或以其他方式将生成的pdf发送给最终用户?我宁愿避免将文件保存到文件系统,如果可以的话,以后不得不删除它。。。希望以某种方式流式传输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
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,感谢您的更新。然而,我注意到二进制字符串编码仍然在内部使用。这意味着当节点最终删除对编码的支持时,库将中断。