如何在云功能中获取对Google云存储桶的引用?

时间:2018-04-26 06:48:31

标签: typescript firebase google-cloud-storage google-cloud-functions

我正在尝试复制指南Example: image transformation

我好,直到我需要打电话:

import * as gcs from '@google-cloud/storage';
import * as functions from 'firebase-functions';

export const onFileChange = functions.storage.object().onFinalize(object => {

  // this line throws a TypeScript Error
  const destBucket = gcs.bucket(fileBucket);
  ...
}
  

物业'桶'类型' typeof Storage'上不存在。你是说' Bucket'?

我也尝试过:

const destBucket = new gcs.Bucket(new gcs.Storage({}), object.bucket);

这个编译但是在执行时我得到一个错误:

  

gcs.Storage不是构造函数

似乎API已更改,但我已更新到最新版本:

"@google-cloud/storage": "^1.6.0",
"firebase-functions": "^1.0.2",

如何获取对Bucket的引用以便我可以调用?:

destBucket
    .file(filePath)
    .download({ destination: tempFilePath })
    .then(() => { ... })

2 个答案:

答案 0 :(得分:1)

您是否使用如下配置对象声明了gcs:

const config = {
    projectId: '....',
    keyFilename: './.......-adminsdk-0vlsn-34c393497c.json'
};

const storage = require('@google-cloud/storage')(config);

您必须使用在Firebase中生成的service-key.json,如此Cloud Functions官方示例中所述https://github.com/firebase/functions-samples/tree/master/generate-thumbnail

"转到Firebase控制台,选择齿轮图像>项目设置>服务帐户,然后单击生成新私钥以下载服务帐户密钥JSON文档。"

此外,错误消息很可能意味着您必须创建存储实例。

答案 1 :(得分:0)

遇到了同样的问题,这就是我的解决方法:

import * as functions from 'firebase-functions';
import * as admin from 'firebase-admin';
import * as path from 'path'
import * as os from 'os'
import * as child_process from 'child_process'
import * as fs from 'fs'

admin.initializeApp(functions.config().firebase);

export const resizePhoto = functions.storage.object().onFinalize(async object => {

   const bucket = admin.storage().bucket(object.bucket);

.....