从可调用的https云功能将图像上传到Firebase存储

时间:2020-07-21 12:41:49

标签: node.js firebase google-cloud-functions google-cloud-storage

我想通过可调用的https云功能将图像上传到Firebase存储中,但是我不知道该怎么做。

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

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

admin.initializeApp();

const storageBucket = admin.storage().bucket('gs://xxxxx.appspot.com');

exports.test_upload = functions.https.onRequest(async (request, response) => {

    var base64Img = "data:image/jpeg;base64,/9j/4AAQSkZJRg...AoNDQoIC";

    let filename = new Date().getTime() + '.jpg';

    await storageRef.child('/destination/'+filename).putString(base64Img, 'data_url').then(function(snapshot) {

        snapshot.ref.getDownloadURL().then(async (url) => { 
            
            console.log(url);

        });

    });


    response.status(200).send("Done!");

});

您能帮助我了解如何做到吗?

非常感谢

更新:2020/07/22

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

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

admin.initializeApp();

const storageBucket = admin.storage().bucket('perfume-group.appspot');

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

const storage = new Storage({keyFilename: 'perfume-group-key.json'});

exports.test_upload = functions.https.onRequest(async (request, response) => {

    /// CAS 1: Don't works
    // Source: https://stackoverflow.com/questions/53969468/how-to-store-files-in-firebase-using-node-js

    const fileUrl = 'https://i.pinimg.com/originals/4a/9d/f8/4a9df83774219e0d02bbb9e5dc9be125.jpg';

    const opts = {
        destination: 'destination/file1.jpg',
        metadata: {
            contentType: 'image/jpeg'
        }
    };

    firebase.storage().bucket().upload(fileUrl, opts);

    //////////////////////////////////////////////////

    /// CASE 2: Don't works

    const bucket = storage.bucket('perfume-group.appspot.com');

    bucket.upload(fileUrl, {
        destination: 'destination/file2.jpg',
        metadata: {
            contentType: 'image/jpeg'
        }
    });

    //////////////////////////////////////////////////

    /// CASE 3: Don't works

    const options = {
      destination: 'destination/file3.jpg',
    };

    // Downloads the file
    await storage.bucket('perfume-group.appspot.com').file(fileUrl).download(options);

    //////////////////////////////////////////////////


    response.status(200).send("Done!");

});

有没有可能奏效的例子?
喜欢这个页面:https://firebase.google.com/docs/storage/web/upload-files

我了解如何向数据库添加数据,但是如何向存储添加文件尚不清楚。

为什么这个解释不起作用? -> https://googleapis.dev/nodejs/storage/latest/Bucket.html#upload

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

await bucket.upload('https://i.pinimg.com/originals/4a/9d/f8/4a9df83774219e0d02bbb9e5dc9be125.jpg', function(err, file, apiResponse) {
      
});

毕竟,我的存储空间还是空的。

1 个答案:

答案 0 :(得分:0)

您似乎正在尝试在Cloud Functions代码中使用Firebase JavaScript SDK进行Cloud Storage,这是不可能的。用于云存储的Firebase JavaScript SDK仅在Web客户端中可用。

在服务器端环境中,您需要使用Firebase Admin SDK与Cloud Storage进行交互。在这种情况下,您将最终使用pre-initialized version中的Node.js SDK for Cloud Storage

因此,要了解如何在Cloud Functions中上传图像,我将搜索Node.js SDK for Cloud Storage upload file。这导致: