在我调用 doc.end() 之前,PDFKIT 不会开始对 http 响应进行流式传输

PDFKIT not starting streaming on http response till I call doc.end()

我正在使用 pdfkit 在运行时生成 pdf 并在 http 响应中返回它以供下载。我可以在浏览器端下载文件,但下载对话框没有立即打开。而是等待 doc.end 被调用。我猜 pdfkit 无法有效地推送流。还有其他人遇到过这个吗?如果是,请指导。

这是我正在尝试的示例代码

exports.testPdfKit = functions.https.onRequest((request, response) => {
    //create pdf document
    doc.pipe(response);

    response.set('Content-Disposition', `attachment;filename=testpdfstream.pdf`);
    response.writeHead(200, { 'Content-Type': 'application/pdf' })

    const bigText = "some big text"

    for (var i = 0; i < 1000; i++) {
        console.log('inside iteration -',i)
        doc.text(bigText);
        doc.addPage();
    }
    doc.end()
});

我正在 firebase 函数上实现此功能,它在内部使用 expressjs 来处理 http 请求。为了在我这边生成更大的文件,流式传输对我来说是必须的。

HTTP 函数无法流式传输函数的输入或输出。整个请求在一块内存中传递,响应被收集并在一块内存中发送回客户端。两者的最大大小均为 10MB。 Cloud Functions 的这种限制没有解决方法(但它确实可以帮助您更好地扩展系统)。

如果您需要流式传输或 websockets,则需要使用不同的产品,例如应用引擎或计算引擎。