Typescript中用于Firebase存储的云函数(类型存储中不存在属性'ref')

问题描述 投票:0回答:1

今天,我可能一直盯着这太久了。我具有云功能,可以自动为上传的图像生成缩略图。上传缩略图后,我想要第二个函数来获取缩略图的URL和原始对象的URL,以便可以将它们保存到文档中。

[当我尝试部署时,出现以下错误:src / index.ts:28:29-错误TS2339:存储类型上不存在属性“ ref”。

现在消息已经很清楚了,但是我真的不知道应该使用什么。我在网上看到的大多数内容都将ref()作为属性显示。任何帮助将不胜感激!

此问题在//获取下面的旧部分。

    import * as functions from "firebase-functions";

    import * as admin from "firebase-admin";

    const firebase = admin.initializeApp();

    export const addNewImageToPlantFile = functions.storage.bucket("users/{userID}/plants/{docID}/images").object().onFinalize(async (object, context) => {

//***ON CREATION OF NEW THUMBNAIL, WRITE TO FILE

  //check image name to decide if run

      if (object && object.name && object.name.endsWith('_200x200.jpg')) {

      const {docID} = context.params;

  //get the path of the original image

      const split = object?.name.split('_200x200');

      const pathFull = split.join();

      console.log(pathFull);

  //get the url

      const urlThumb = object.mediaLink;

      console.log(urlThumb);

  //get the old 

      const storage = firebase.storage;

      **const reference = storage.ref();**

      const imageReference = reference.child(pathFull);

      const urlFull = await imageReference.getDownloadURL();

      console.log(urlFull);

  //*****PACK THE DATA AND UPDATE FILE*****//

  //get the time from ID



    const time = Number(docID.split('_')[0]);

  //pack the data

      const data = {
          'date': time,
          'full': urlFull,
          'thumb':urlThumb
      };

  //update document

      return admin.firestore().doc('plants/' + docID).update({
        imageSets: admin.firestore.FieldValue.arrayUnion(data)
      });

      } else {
          console.log('Uploaded image is not a thumbnail (_200x200.jpg)');
          return
      }

//FUNCTION END

    });
typescript firebase google-cloud-functions firebase-storage
1个回答
0
投票

您需要了解将Firebase Admin SDK与Cloud Storage结合使用的一件事,就是该API与Jav​​aScript的客户端SDK不同。 Firebase Admin实际上包装了用于nodejs的Cloud Storage API,已记录在here中。

您可能只想删除这些行:

const storage = firebase.storage;
const reference = storage.ref();

并且将它们替换为以这样的开头的代码:

const imageFile = admin.storage().bucket().file(pathFull);

也请注意,Cloud SDK(以及所有处理Cloud Storage的后端SDK)没有“下载URL”的概念,就像您在客户端库中看到的那样。您将需要另一种方式来生成URL,即使用签名URL,此问题对此进行了讨论:Get Download URL from file uploaded with Cloud Functions for Firebase

因此,您将不得不使用imageFile和该问题的答案中的策略概述来继续您的功能。

© www.soinside.com 2019 - 2024. All rights reserved.