我想通过可调用的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) {
});
毕竟,我的存储空间还是空的。
答案 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。这导致: