gpt4 book ai didi

firebase - 将文件从 Firebase Cloud Functions 上传到 Cloud Storage

转载 作者:行者123 更新时间:2023-12-03 15:40:59 27 4
gpt4 key购买 nike

documentation太复杂了,我无法理解。它展示了如何将文件从 Cloud Storage 下载到 Cloud Functions、操作文件,然后将新文件上传到 Cloud Storage。我只想查看将文件从 Cloud Functions 上传到 Cloud Storage 的基本、最低限度的说明。为什么这不起作用:

const functions = require('firebase-functions');
const admin = require('firebase-admin');

admin.initializeApp();

exports.storage = functions.firestore.document('Test_Value').onUpdate((change, context) => {

var metadata = {
contentType: 'text',
};

admin.storage().ref().put( {'test': 'test'}, metadata)
.then(function() {
console.log("Document written.");
})
.catch(function(error) {
console.error(error);
})

});

错误消息是 admin.storage(...).ref is not a function .我猜 firebase-admin包括 Firestore 但不包括 Storage?而不是 firebase-admin我应该使用 @google-cloud/storage ?为什么这不起作用:
const functions = require('firebase-functions');
const admin = require('firebase-admin');

const {Storage} = require('@google-cloud/storage')();
const storage = new Storage();

admin.initializeApp();

exports.storage = functions.firestore.document('Test_Value').onUpdate((change, context) => {

storage.bucket().upload( {'test': 'test'} , {
metadata: {
contentType: 'text'
}
})

});

我什至无法部署此代码,错误消息是
Error parsing triggers: Cannot find module './clone.js'

显然缺少 npm 模块依赖项?但是该模块不称为 clone.js ?我试过要求 child-process-promise , path , os , 和 fs ;没有修复丢失的 clone.js错误。

为什么 admin.initializeApp();在我的 index.html 中缺少参数我有文件:
firebase.initializeApp({
apiKey: 'swordfish',
authDomain: 'myapp.firebaseapp.com',
databaseURL: "https://myapp.firebaseio.com",
projectId: 'myapp',
storageBucket: "myapp.appspot.com"
});

我看到的另一个问题:
npm list -g --depth=0       

/Users/TDK/.nvm/versions/node/v6.11.2/lib
├── child_process@1.0.2
├── UNMET PEER DEPENDENCY error: ENOENT: no such file or directory, open '/Users/TDK/.nvm/versions/node/v6.11.2/lib/node_modules/firebase-admin/package.json
├── firebase-functions@2.1.0
├── firebase-tools@6.0.1
├── firestore-backup-restore@1.3.1
├── fs@0.0.2
├── npm@6.4.1
├── npm-check@5.9.0
├── protractor@5.4.1
├── request@2.88.0
└── watson-developer-cloud@3.13.0

换句话说, firebase-admin 有问题。 ,或使用 Node 6.11.2 .我应该使用 Node 版本管理器恢复到旧版本的 Node 吗?

最佳答案

  • 转至 https://console.cloud.google.com/iam-admin/iam
  • 单击您的App Engine default service account 旁边的铅笔图标
  • + ADD ANOTHER ROLE
  • 添加 Cloud Functions Service Agent

  • 在我的特定用例中,我需要将 base64 字符串解码为字节数组,然后使用它来保存图像。
        var serviceAccount = require("./../serviceAccountKey.json");

    import * as functions from 'firebase-functions';
    import * as admin from 'firebase-admin';

    admin.initializeApp({
    projectId: serviceAccount.project_id,
    credential: admin.credential.cert(serviceAccount),
    databaseURL: "https://your_project_id_here.firebaseio.com", //update this
    storageBucket: "your_bucket_name_here.appspot.com" //update this
    });

    function uploadProfileImage(imageBytes64Str: string): Promise<any> {

    const bucket = admin.storage().bucket()
    const imageBuffer = Buffer.from(imageBytes64Str, 'base64')
    const imageByteArray = new Uint8Array(imageBuffer);
    const file = bucket.file(`images/profile_photo.png`);
    const options = { resumable: false, metadata: { contentType: "image/jpg" } }

    //options may not be necessary
    return file.save(imageByteArray, options)
    .then(stuff => {
    return file.getSignedUrl({
    action: 'read',
    expires: '03-09-2500'
    })
    })
    .then(urls => {
    const url = urls[0];
    console.log(`Image url = ${url}`)
    return url
    })
    .catch(err => {
    console.log(`Unable to upload image ${err}`)
    })
    }

    然后你可以像这样调用方法并链接调用。
        uploadProfileImage(image_bytes_here)
    .then(url => {
    //Do stuff with the url here
    })

    注意:您必须使用服务帐户初始化 admin 并指定默认存储桶。 如果你只是做admin.initializeApp()那么您的图片网址将在 10 天内过期。

    正确使用服务帐户的步骤。
  • 转至 Service Accounts并生成私钥
  • 将 JSON 文件放入您的函数文件夹(在 src 和 node_modules 旁边)
  • 转至 Storage并复制前面不包括“gs://”的 URL。初始化 admin 时将其用于存储桶 url。
  • 使用上面的项目 ID 作为数据库 URL。
  • 关于firebase - 将文件从 Firebase Cloud Functions 上传到 Cloud Storage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53143965/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com