我希望将图像上传到Firebase存储,该服务仍在运行并且不被弃用,我不想使用google-cloud,应该如何解决?
所有其他帖子都建议使用gcloud
我能够使用实时数据库,但是存储却没有运气
var firebase = require('firebase ');
app.use(express.static('public'))
var config = {
apiKey: "xxxxxxxx",
authDomain: "xxxxxxxx",
databaseURL: "xxxxxxxx",
projectId: "xxxxxxxx",
storageBucket: "xxxxxxxx",
messagingSenderId: "xxxxxxxx",
};
firebase.initializeApp(config);
app.get('/home', (request, response) => {
var storageRef = firebase.storage().ref('/master/'+file.name);
fs.readFile('public/test.png', function(err, data) {
if (err) throw err;
storageRef.put(data);
});
})
TypeError:firebase.storage不是函数
答案 0 :(得分:1)
您说您不想使用Google Cloud,但我有一个坏消息,那就是Firebase的全部存储-只是Google Cloud存储桶的包装。如果您使用Firebase存储,则将使用Google Cloud存储。
从代码的角度来看,似乎您在混淆不同的Firebase库。您正在使用Javascript SDK for the FRONT END ...,但您将此问题标记为node.js-如果您尝试从服务器执行操作,则需要使用Javascript SDK (called firebase-admin) for Node.js
您说您已经找到其他答案来解释如何与Google Cloud进行交互,因此我不会写出完整的分步指南,而只是指出在本书中遇到的任何人。未来朝着正确的方向...
这是Node.js的Firebase存储的相关页面:https://firebase.google.com/docs/storage/admin/start
这是服务器端上传到Firebase Storage(又是真正的Google Cloud )的官方页面。它链接到the official Google Cloud docs,以说明如何上传文件。
...因此,从Firebase文档中将这两件事放在一起,您将获得存储桶参考:
var bucket = admin.storage().bucket("my-custom-bucket");
...,然后参考Google Cloud文档中的以下代码,获取使用存储桶引用进行上传的示例:
// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');
// Creates a client
const storage = new Storage();
/**
* TODO(developer): Uncomment the following lines before running the sample.
*/
// const bucketName = 'Name of a bucket, e.g. my-bucket';
// const filename = 'Local file to upload, e.g. ./local/path/to/file.txt';
// Uploads a local file to the bucket
await storage.bucket(bucketName).upload(filename, {
// Support for HTTP requests made with `Accept-Encoding: gzip`
gzip: true,
metadata: {
// Enable long-lived HTTP caching headers
// Use only if the contents of the file will never change
// (If the contents will change, use cacheControl: 'no-cache')
cacheControl: 'public, max-age=31536000',
},
});
console.log(`${filename} uploaded to ${bucketName}.`);