在Firebase Cloud Firestore中创建文档时生成PDF
我正在开发一个基于web表单创建PDF的应用程序 我目前正试图使用pdfmake根据firestore文档创建触发器生成PDF在Firebase Cloud Firestore中创建文档时生成PDF,firebase,google-cloud-firestore,google-cloud-functions,firebase-storage,Firebase,Google Cloud Firestore,Google Cloud Functions,Firebase Storage,我正在开发一个基于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 c
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');
});
触发器被调用,但是我得到错误“error:enoint:no-this-file或directory,stat'document.pdf'”
我已经尝试过将onCreate函数设置为异步,而不使用
非常感谢您的帮助在/tmp之外的云函数中,无法写入任何文件位置。如果您的代码需要写入文件,它应该根据
os.tmpdir()
构建路径,如中所述:
文件系统中唯一可写的部分是/tmp目录,它
可以使用在函数实例中存储临时文件。这是一个
本地磁盘装入点,称为“tmpfs”卷,其中写入数据
该卷存储在内存中。请注意,它将消耗内存
为函数配置的资源
文件系统的其余部分是只读的,用户可以访问
功能
如果我将tempDoc.pdf更改为path.join(os.tmpdir(),'tempDoc.pdf'),我仍然会收到错误“error:enoint:没有这样的文件或目录,请打开“/tmp/document.pdf”。我添加了操作系统和路径的导入。您还忽略了异步API返回的所有承诺/回调。您需要返回一个在所有异步工作完成时解析的承诺。