javascript - 从触发器内在云存储桶中创建文件

标签 javascript firebase google-cloud-firestore google-cloud-functions google-cloud-storage

我希望能够在项目存储桶中创建文件作为 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/

相关文章:

javascript - Meteor 复选框 - 将表达式的值显示为字符串,而不解释为 bool 值

android - 无法解析 com.google.firebase :firebase-crash:17. 0.2

javascript - 来自不同用户的消息在同一侧的问题

javascript - 正则表达式匹配整个单词不使用\b

javascript - 在 Angular 4 的 Promise 中连接数组后将其显示为未定义

firebase - "Catch all other"Firebase 数据库规则

ios - 如何在 ios swift5 中编码 firebase 时间戳?

firebase - 类型错误 : Cannot read property '_fieldsProto' of undefined

firebase - 如何将 Firestore 文档列表打印到控制台?

javascript - 来自第 3 方 API 的回调未在 MeteorJS 中获取当前用户