Node.js Firebase功能上载到存储器
我正在尝试使用Firebase云函数将图像上载到存储器。 当我从浏览器运行该函数时,我收到一个“0”响应,指示它失败。 之后,我检查日志,它显示错误: 上传不好![错误:enoint:没有这样的文件或目录,stat'https://i2.wp.com/lifemadesimplebakes.com/wp-content/uploads/2018/03/How-To-Make-Fruit-Salad-680x680.jpg“]{ 但是图像url确实存在。所以我想知道为什么它不起作用? 以下是我的整个云功能:Node.js Firebase功能上载到存储器,node.js,firebase,google-cloud-functions,firebase-storage,Node.js,Firebase,Google Cloud Functions,Firebase Storage,我正在尝试使用Firebase云函数将图像上载到存储器。 当我从浏览器运行该函数时,我收到一个“0”响应,指示它失败。 之后,我检查日志,它显示错误: 上传不好![错误:enoint:没有这样的文件或目录,stat'https://i2.wp.com/lifemadesimplebakes.com/wp-content/uploads/2018/03/How-To-Make-Fruit-Salad-680x680.jpg“]{ 但是图像url确实存在。所以我想知道为什么它不起作用? 以下是我的整
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');
});
})
云存储不支持直接从某个URL上载内容。不采用URL。它采用本地文件的路径
因此,您必须编写代码在本地下载URL的内容,然后将其作为对象上载到云存储。您也可以使用SDK将下载的内容流式传输到存储中。请参阅。我建议研究如何有效地实现这一点。因此,在进一步研究之后,我有些事要做。 在我的前端,我正在将一幅图像编码到base64,并将其作为参数
imgData
传递给我的云函数。然后在函数内部检索它,用数据制作一个缓冲区
,然后使用文件将其上载到我的存储桶中。保存。
现在它上传了,如果我从控制台下载它的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');
})
以下是一些帮助我前进的信息:
你好,道格,谢谢你提供的精彩信息,我不知道它没有使用URL。如果我从前端获取图像,我是否能够将其作为参数传递给函数,然后函数可以将其与数据一起上载?当然,你可以尝试一下。我是否可以将图像作为base64字符串传递给我的云函数,然后使用CreateWriteStreamm
要将图像解码到存储器中吗?我可以使用admin.storage.bucket.file.save
上传到我的bucket,但只是努力将其保存为正确的图像!你也可以尝试一下。如果你的代码无法按预期方式工作,请在新问题中单独发布。