使用node.js

时间:2019-03-11 17:16:09

标签: node.js firebase firebase-storage

我希望将图像上传到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不是函数

1 个答案:

答案 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}.`);