Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud firestore 如何将数据从云功能流式传输到云存储_Google Cloud Firestore_Cloud - Fatal编程技术网

Google cloud firestore 如何将数据从云功能流式传输到云存储

Google cloud firestore 如何将数据从云功能流式传输到云存储,google-cloud-firestore,cloud,Google Cloud Firestore,Cloud,我正在尝试创建一个云函数,将一些数据(来自firestore的文档)保存到云存储中 以前写过一些云函数,但对云存储、存储桶等有点陌生。 根据我所读到的,我必须将这些数据“流”到一个存储桶中 我很想看到一个简短的片段,可以做到这一点:)为了让您实现这一点,它不应该是非常复杂的事情,所以我希望我能帮助您 为了实现这一点,我将遵循本文中介绍的示例—如果您感兴趣,可以完全遵循该示例—重点关注从Firestore到云存储的上传。我将解释使用哪些部件以及如何使用它们,以实现您的目标 一旦您创建了云存储桶-它

我正在尝试创建一个云函数,将一些数据(来自firestore的文档)保存到云存储中

以前写过一些云函数,但对云存储、存储桶等有点陌生。 根据我所读到的,我必须将这些数据“流”到一个存储桶中


我很想看到一个简短的片段,可以做到这一点:)

为了让您实现这一点,它不应该是非常复杂的事情,所以我希望我能帮助您

为了实现这一点,我将遵循本文中介绍的示例—如果您感兴趣,可以完全遵循该示例—重点关注从Firestore到云存储的上传。我将解释使用哪些部件以及如何使用它们,以实现您的目标

一旦您创建了云存储桶-它应该在设置中配置了
Multi-regional
Nearline
-您需要使用下面的代码,如下所示

index.js
文件:

const firestore = require('@google-cloud/firestore');
const client = new firestore.v1.FirestoreAdminClient();
// Replace BUCKET_NAME
const bucket = 'gs://<bucket-id>'
exports.scheduledFirestoreBackup = (event, context) => {
  const databaseName = client.databasePath(
    process.env.GCLOUD_PROJECT,
    '(default)'
  );
return client
    .exportDocuments({
      name: databaseName,
      outputUriPrefix: bucket,
      // Leave collectionIds empty to export all collections
      // or define a list of collection IDs:
      // collectionIds: ['users', 'posts']
      collectionIds: [],
    })
    .then(responses => {
      const response = responses[0];
      console.log(`Operation Name: ${response['name']}`);
      return response;
    })
    .catch(err => {
      console.error(err);
    });
};
{
  "dependencies": {
    "@google-cloud/firestore": "^1.3.0"
  }
}
应该创建这些文件,云函数中的配置如下:一个唯一的名称<代码>云订阅/发布作为触发器;主题名称类似或等于
initiateFirestoreBackup
;使用Node.js,源代码将是上面编写的文件,并执行
scheduledFirestoreBackup

以上代码应该足以让您从Firestore导出到云存储,因为它将获取您的所有集合(或者您可以定义具体信息)并发送到您已经创建的bucket

除此之外,如果您想了解有关使用云功能将文件上载到云存储的更多信息,也可以在此处查看:


如果这些信息对你有帮助,请告诉我

多亏了@gso_gabriel,我才能够为我的文档创建部分备份。 对于任何感兴趣的人,这里是我的代码的简化版本:

const bucketName = 'myproject.appspot.com';

exports.backup = functions.https.onCall(async (data, context) => {
   const userDoc = await admin.firestore().collection('users').doc('abc123').get();
   await writeFile('temp', 'user.json', JSON.stringify(userDoc.data()));
}

async function writeFile(dirName, fileName, content) {
   var bucket = admin.storage().bucket(bucketName);
   const destFilename = dirName + '/' + fileName;
   const file = bucket.file(destFilename);
   const options = {
      destination: destFilename,
      metadata: { contentType: "application/json" }
   };
   await bucket.file(destFilename).save(content, options);
}

是的,这个解决方案也可以在这里找到:不幸的是,它导出的数据比我想要的多(子集合等),这意味着高成本。使用您的第二个链接,我能够实现部分备份—这非常适合我的需要。令人惊叹的!非常感谢:)当然,我理解你的观点,@user6097845是有道理的。我很高兴它帮助了你!