Как я могу получить ссылку на хранилище облачного хранилища Google внутри моей облачной функции? - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь повторить руководство Пример: преобразование изображения .

Я в порядке, пока мне не нужно позвонить:

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);
  ...
}

Свойство 'bucket' не существует для типа 'typeof Storage'. Вы имели в виду «Bucket»?

Я тоже пробовал:

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

это компилируется, но при выполнении я получаю ошибку:

gcs. Хранилище не является конструктором

Кажется, что API изменился, но я обновился до последних версий:

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

Как я могу получить ссылку на Bucket, чтобы я мог позвонить?:

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

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Была такая же проблема, и вот как я это сделал:

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);

.....
0 голосов
/ 26 апреля 2018

Вы объявили gcs с объектом конфигурации, таким как:

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

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

Вы должны использовать service-key.json, сгенерированный в Firebase, как объяснено в этом официальном примере облачных функций https://github.com/firebase/functions-samples/tree/master/generate-thumbnail

«Перейдите в консоль Firebase, выберите образ шестеренки> настройки проекта> Учетные записи служб и нажмите« Создать новый закрытый ключ »для загрузки документа JSON ключа служебной учетной записи.»


Кроме того, сообщение об ошибкескорее всего, это означает, что вам нужно создать экземпляр Storage.

...