我希望能够作为Firestore云触发器的一部分在项目Bucket中创建文件。
当特定集合上的文档发生更改时,我需要能够从该文档中获取数据并将其写入到云存储中存储桶中的文件中 例子
exports.myFunction = functions.firestore
.document('documents/{docId}')
.onUpdate((change, context) => {
const after = change.after.data() as Document;
// CREATE AND WRITE TO file IN BUCKET HERE
});
我发现了许多有关如何上传文件的示例。我探索了
admin.storage().bucket().file(path)
createWriteStream()
write()
但是我似乎找不到有关如何实现上述目标的文档。
是否可以在触发器内实现?如果可以,我在哪里可以找到有关此操作的文档?
这就是为什么我要这样做(以防万一我走错了路)。我们有一个应用程序,用户可以在其中为他们完成的工作生成采购订单。在他们从软件启动生成时,我们需要创建带时间戳的文档[pdf](在安全的位置,但经过身份验证的用户可以访问该文档)来表示该采购订单。创建数据的数据将来自触发更改的文档。
答案 0 :(得分:0)
正如@Doug Stevenson所说,您可以使用节点流。
您可以在GCP getting started samples repo的此示例中查看如何执行此操作。 您需要提供文件名和文件缓冲区才能将其流式传输到GCS:
function sendUploadToGCS(req, res, next) {
if (!req.file) {
return next();
}
const gcsname = Date.now() + req.file.originalname;
const file = bucket.file(gcsname);
const stream = file.createWriteStream({
metadata: {
contentType: req.file.mimetype,
},
resumable: false,
});
stream.on('error', err => {
req.file.cloudStorageError = err;
next(err);
});
stream.on('finish', async () => {
req.file.cloudStorageObject = gcsname;
await file.makePublic();
req.file.cloudStoragePublicUrl = getPublicUrl(gcsname);
next();
});
stream.end(req.file.buffer);
}