firebase - 在 Firebase Cloud Firestore 中创建文档时生成 PDF
问题描述
我正在开发一个基于 Web 表单创建 PDF 的应用程序。
我目前正在尝试使用 pdfmake 基于 firestore 文档创建触发器生成 PDF
import * as functions from 'firebase-functions';
const admin = require('firebase-admin);
admin.initializeApp();
const PdfPrinter = require('pdfmake');
const fs = require('fs');
export const createPDF = functions.firestore
.document('pdfs/{pdf}')
.onCreate(async (snap, context) => {
var pdfName = context.params.pdf;
var printer = new PdfPrinter();
var docDefinition = {
// Pdf Definitions
};
var options = {
// Pdf Options
};
var pdfDoc = printer.createPdfKitDocument(docDefinition, options);
pdfDoc.pipe(fs.createWriteStream('tempDoc.pdf'));
await pdfDoc.end();
// Upload to Firebase Storage
const bucket = admin.storage().bucket('myproject.appspot.com');
bucket.upload('tempDoc.pdf', {
destination: pdfName + '.pdf',
});
return fs.unlinkSync('document.pdf');
});
触发器被调用,但是我收到错误“错误:ENOENT:没有这样的文件或目录,stat'document.pdf'”
我已经尝试过 onCreate 函数是异步的并且没有。
任何帮助是极大的赞赏
解决方案
无法写入 /tmp 之外的 Cloud Functions 中的任何文件位置。如果您的代码需要编写文件,则应os.tmpdir()
按照文档中的说明构建路径:
文件系统中唯一可写的部分是 /tmp 目录,您可以使用它在函数实例中存储临时文件。这是一个本地磁盘挂载点,称为“tmpfs”卷,其中写入该卷的数据存储在内存中。请注意,它将消耗为该功能提供的内存资源。
文件系统的其余部分是只读的并且可由函数访问。
推荐阅读
- python - 如何通过每次按下按钮来修复计时器增加倒计时速度
- python - 如何从 __init__.py 或 conftest.py 自动获取模块名称?
- variables - 如何在第一个时期设置变量相等并允许它们在 GAMS 中的所有剩余时期不同?
- javascript - 我们使用哪些钩子来更新和删除反应?
- ios - 将行插入不同的段时出现核心数据错误
- python - 如何生成自定义隶属函数 Scikit Fuzzy 模块?
- java - 如何设置 Jenkins 使用系统的日期、时间、数字和货币格式?
- java - html 的语义分析器失败
- vb.net - 需要帮助将文本转换为北约拼音字母表
- binary - 寄存器值 1'b0 和 2'b00 的符号