将存储与 Google Cloud Functions for Firebase 结合使用

Use Storage with Google Cloud Functions for Firebase

我看到很多关于将存储与 Cloud Functions 结合使用的有争议的文档。我真的不明白我应该使用哪个文档。无论如何,我认为我已经尝试了所有这些方法,但没有任何效果。请帮我。 例如:我正在尝试使用此文档:https://firebase.google.com/docs/storage/admin/start

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const database = admin.database();

var bucket = admin.storage().bucket("my-custom-bucket");

我有错误

Unhandled error TypeError: storage.bucket is not a function

如果我看到这个文档:https://firebase.google.com/docs/storage/extend-with-functions

那是什么?

const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
const database = admin.database();
const gcs = require('@google-cloud/storage')(); //!!! - is it mistype?
const spawn = require('child-process-promise').spawn;
const path = require('path');
const os = require('os');
const fs = require('fs');

const bucket = gcs.bucket('fileBucket');

TypeError: require(...) is not a function

但无论如何,即使输入错误,下一个错误也会是:

TypeError: gcs.bucket is not a function

是的,我确实安装了:

npm install --save child-process-promise
npm install --save @google-cloud/storage

有人知道怎么用吗?或者正确的文档在哪里?

这可能与 Cloud Functions 无关。

首先,您应该知道Firebase Admin SDK 只是包装了Cloud Storage SDK。它最终公开了所有相同的对象和 API。

其次,要知道 2.0.0 版的 Cloud Storage SDK for node 在您使用其 API 的方式上引入了一些重大的破坏性变化。比较导入库的old way to the new way

A​​dmin SDK(以及您正在查看的文档)都是为 1.7.0 的旧方法构建的。如果您手动将 Cloud Storage 更新为 2.0.0,则 Admin SDK 可能会因为此更改而中断,因为从 Cloud Storage SDK 导出的主要对象不同。

您应该在不更新 Cloud Storage 依赖项的情况下使用 Admin SDK,或者跳过 Admin SDK 直接使用 Cloud Storage SDK。