Firebase函数上传到存储

Gre*_*ell 0 node.js firebase google-cloud-functions firebase-storage

我正在尝试使用 Firebase 云功能将图像上传到存储。当我从浏览器运行该函数时,我收到“0”响应,表明它失败。然后我检查日志并显示错误:

上传不好![错误:ENOENT:没有这样的文件或目录,stat 'https://i2.wp.com/lifemadesimplebakes.com/wp-content/uploads/2018/03/How-To-Make-Fruit-Salad-680x680.jpg '] {

但图像网址确实存在。所以我想知道为什么它不起作用?这是我的整个云功能:

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


exports.uploadTest = functions.https.onRequest(async (request, response) => {
    const url = 'https://i2.wp.com/lifemadesimplebakes.com/wp-content/uploads/2018/03/How-To-Make-Fruit-Salad-680x680.jpg';
    
    admin.initializeApp();
    
    const bucket = admin.storage().bucket('my-bucket.appspot.com');

    bucket.upload(url, {
        destination: "myFolder/myFile.png"
    }).then(() => {
        console.log("Upload good!");
        response.send('1');
        return true
    }).catch(err => {
        console.error("Upload bad!", err);
        response.send('0');
    });
})
Run Code Online (Sandbox Code Playgroud)

Gre*_*ell 6

因此,经过更多研究后,我找到了一些工作。在我的前端,我将图像编码为 base64,并将其作为参数传递给我的云函数imgData。然后在函数内我检索它,用Buffer数据创建一个,然后使用将其上传到我的存储桶中File.save。现在它上传了,如果我从控制台下载它的 URL 并在浏览器上检查它,图像将按预期显示。

我的前端需要使用 REST,所以我根本无法使用 Firebase 的 sdk,这可能会让这变得更容易。

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

admin.initializeApp();


exports.uploadTest = functions.https.onRequest(async (request, response) => {
    const imgData = request.body.imgData;
    
    const bucket = admin.storage().bucket('my-bucket.appspot.com');
    const file = bucket.file('myFolder/myFile.jpg');

    var imgBuffer = new Buffer.from(imgData, 'base64')

    await file.save(imgBuffer, {
        contentType: 'image/jpeg'
    }).catch(err => {
        console.error("Upload bad!", err);
        response.send('0');
    });

    response.send('1');
})
Run Code Online (Sandbox Code Playgroud)

以下是一些对我有帮助的信息: https://groups.google.com/g/firebase-talk/c/aDJvYyNIJik ?pli=1