我希望能够在项目存储桶中创建文件作为 Firestore 云触发器的一部分。
当特定集合上的文档发生更改时,我需要能够从该文档中获取数据并将其写入云存储中的存储桶中的文件中 示例
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(路径)
createWriteStream()
write()
但我似乎找不到有关如何准确实现上述目标的文档。
这是否可以在触发器内实现?如果可以,我在哪里可以找到有关如何执行此操作的文档?
这就是我想这样做的原因(以防万一我的做法完全错误)。我们有一个应用程序,用户可以为他们所做的工作生成采购订单。当他们从软件中启动生成时,我们需要创建一个代表此采购订单的带时间戳的文档 [pdf](在安全位置,但经过身份验证的用户可以访问)。创建此操作的数据将来自触发更改的文档。
最佳答案
正如@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);
}
关于javascript - 从触发器内在云存储桶中创建文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60847639/