我正在尝试理解如何使用Node.js在Firebase Storage中上传文件。我的第一次尝试是使用Firebase库:
"use strict";
var firebase = require('firebase');
var config = {
apiKey: "AIz...kBY",
authDomain: "em....firebaseapp.com",
databaseURL: "https://em....firebaseio.com",
storageBucket: "em....appspot.com",
messagingSenderId: "95...6"
};
firebase.initializeApp(config);
// Error: firebase.storage is undefined, so not a function
var storageRef = firebase.storage().ref();
var uploadTask = storageRef.child('images/octofez.png').put(file);
// Register three observers:
// 1. 'state_changed' observer, called any time the state changes
// 2. Error observer, called on failure
// 3. Completion observer, called on successful completion
uploadTask.on('state_changed', function(snapshot){
...
}, function(error) {
console.error("Something nasty happened", error);
}, function() {
var downloadURL = uploadTask.snapshot.downloadURL;
console.log("Done. Enjoy.", downloadURL);
});
但事实证明Firebase不能从服务器端上传文件,正如文档中明确指出的:
Firebase存储不包含在服务器端Firebase npm模块中。相反,您可以使用gcloud Node.js客户端。
$ npm install --save gcloud
在您的代码中,您可以通过以下方式访问您的存储桶:
我们能否在没有Google Cloud Platform帐户的情况下使用
var gcloud = require('gcloud')({ ... }); var gcs = gcloud.storage(); var bucket = gcs.bucket('<your-firebase-storage-bucket>');
gcloud
?如何操作?
如果不行,那么为什么可以从客户端上传文件到Firebase Storage?
我们不能简单地创建一个库来从服务器端发出相同的请求吗?
Firebase Storage与Google Cloud Platform有什么关联?为什么Firebase只允许我们从客户端上传图片?
我的第二次尝试是使用gcloud
库,就像文档中提到的那样:
var gcloud = require("gcloud"); // The following environment variables are set by app.yaml when running on GAE, // but will need to be manually set when running locally. // The storage client is used to communicate with Google Cloud Storage var storage = gcloud.storage({ projectId: "em...", keyFilename: 'auth.json' }); storage.createBucket('octocats', function(err, bucket) { // Error: 403, accountDisabled // The account for the specified project has been disabled. // Create a new blob in the bucket and upload the file data. var blob = bucket.file("octofez.png"); var blobStream = blob.createWriteStream(); blobStream.on('error', function (err) { console.error(err); }); blobStream.on('finish', function () { var publicUrl = `https://storage.googleapis.com/${bucket.name}/${blob.name}`; console.log(publicUrl); }); fs.createReadStream("octofez.png").pipe(blobStream); });
service-account-credentials.json
在哪里? - Aero Wang