当前位置: 首页 > 知识库问答 >
问题:

如何在云函数中访问云存储

文心思
2023-03-14

我试图在我的云功能中访问Firebase云存储,但我一直在云功能日志中出现以下错误:

Error: Failed to import the Cloud Storage client library for Node.js. Make sure to install the "@google-cloud/storage" npm package. Original error: SyntaxError: Unexpected token {
    at new FirebaseError (/srv/node_modules/firebase-admin/lib/utils/error.js:43:28)
    at new Storage (/srv/node_modules/firebase-admin/lib/storage/storage.js:65:19)
    at /srv/node_modules/firebase-admin/lib/firebase-app.js:255:20
    at FirebaseApp.ensureService_ (/srv/node_modules/firebase-admin/lib/firebase-app.js:376:23)
    at FirebaseApp.storage (/srv/node_modules/firebase-admin/lib/firebase-app.js:253:21)
    at FirebaseNamespace.fn (/srv/node_modules/firebase-admin/lib/firebase-namespace.js:292:45)
    at exports.initializeNewVideoUpload.functions.firestore.document.onCreate (/srv/index.js:383:24)
    at cloudFunction (/srv/node_modules/firebase-functions/lib/cloud-functions.js:134:23)
    at /worker/worker.js:825:24
    at <anonymous>

下面是我的代码:

const admin=需要('Firebase-admin'); const函数=需要('Firebase-函数');

admin.initializeApp();
const db = admin.firestore();
exports.initializeNewVideoUpload = functions.firestore.document('new-videos-uploads/{id}').onCreate(async (snapshot, context) => {
      const data = snapshot.data();
      const fileNames = data.file_names;
      const bucket = admin.storage().bucket('trumateappdev.appspot.com');
    
      fileNames.forEach(async fileName => {
        const actualFile = bucket.file(fileName);
        const resumableUpload = await actualFile.createResumableUpload();
        const uploadEndpointUrl = resumableUpload[0];
    
        data.resumable_urls.push(uploadEndpointUrl);
      });
    
      await admin.firestore().collection('new-videos-uploads').doc(context.params.id).update(data);
    });

下面是我的包中的依赖项。json:

"@google-cloud/storage": "^5.5.0",
"firebase-admin": "^9.2.0",
"firebase-functions": "^3.11.0"

PS:我在星火计划上

共有1个答案

彭洲
2023-03-14

我在这里找到了这个解决方案。将此添加到您的package.json

"engines": {"node": "8"}

显然,出现此问题是因为您的节点。js版本太旧了

 类似资料:
  • 我正在构建一个android应用程序,使用谷歌app engine后端。 我在谷歌云存储的一个桶里有一些音频文件(手动上传),我想从后端访问它们(我想获得它们的URL并将它们发送到我的应用程序,这样它就可以播放音频文件)。 谢谢:)

  • 我创建了一个存储触发云功能,当用户从前端上传一个文件时就会激活这个功能。现在我想获取上载该文件的用户的Firebase UID。我想,为了做到这一点,我需要另一个函数,在用户身份验证时触发。所以,基本上,身份验证函数是在用户登录时触发的,然后我们得到了UID,我想把这个UID传递给另一个函数(存储触发的一个),这就是我一直在纠结的部分。那有什么办法吗?

  • 云功能文档说 //使用Firebase管理SDK访问Firebase实时数据库。const admin=require('firebase-admin');管理初始化EAPP(); 我使用的是Cloud Firesta,而不是实时数据库。我如何访问它?

  • 我有一个用Typescript编写的Firebase云函数,在那里我可以访问Google存储桶。 我得到的错误是来自admin的Bucket与我的deleteOldBackup函数中的Bucket不同。 我如何获得Proper Typescript类型谷歌存储在我的firebase云功能?

  • 对于vue-axios auth by api_token,我使用助手文件api.js。

  • 我很抱歉。我以前也提出过同样的问题,但被认为与这个答案重复。我真的不明白那里的答案,我也不明白为什么那个问题会回答我的问题。在我看来很不一样。我需要获取图像对象,但答案是创建一个流。有人能帮我把答案和我的问题联系起来吗?我是新的云功能。请 ================================================================================