firebase - 在我调用 doc.end() 之前,PDFKIT 不会在 http 响应上开始流式传输
问题描述
我正在使用 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 的这种限制没有解决方法(但它确实可以帮助您更好地扩展系统)。
如果您需要流式传输或 websocket,则需要使用不同的产品,例如应用引擎或计算引擎。
推荐阅读
- git - 没有OAuth访问的github桌面企业令牌认证问题
- symfony - 在实时服务器上找不到 yarn encore app.js 文件
- laravel - 从 HttpKernel 获取对 url 的响应,并行化
- mysql - 根据里程表读数计算车辆行驶距离
- kubernetes - 如果 kubernetes 作业失败,是否可以获得通知
- reactjs - 如何知道 React 内置组件何时完成渲染?
- asp.net-mvc - 在 ASP.NET MVC Core 2 应用程序中静默登录到 azure 活动目录
- java - 比较方法违反其一般约定,按不同属性排序
- java - 如何将 maven 原型从 mvncentral 添加到本地 archetype-repo.xml
- php - 将数组对象从数据库转换为字符串