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)
因此,经过更多研究后,我找到了一些工作。在我的前端,我将图像编码为 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
| 归档时间: |
|
| 查看次数: |
2702 次 |
| 最近记录: |