Tôi đang cố gắng hiểu cách tải lên tệp trong Bộ nhớ Firebase, sử dụng Node.js. thử đầu tiên của tôi là sử dụng thư viện căn cứ hỏa lực:Tải tệp lên Bộ nhớ Firebase bằng Node.js
"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);
});
Nhưng nó chỉ ra rằng căn cứ hỏa lực không thể tải tập tin từ phía máy chủ, vì nó nêu rõ trong tài liệu:
Firebase Storage is not included in the server side Firebase npm module. Instead, you can use the gcloud Node.js client.
$ npm install --save gcloud
In your code, you can access your Storage bucket using:
var gcloud = require('gcloud')({ ... }); var gcs = gcloud.storage(); var bucket = gcs.bucket('<your-firebase-storage-bucket>');
thể chúng tôi sử dụng
gcloud
mà không cần có tài khoản trên Google Cloud Platform? Làm sao?Nếu không, làm cách nào để tải tệp lên bộ nhớ Firebase từ phía máy khách là có thể?
Chúng ta có thể tạo một thư viện có cùng yêu cầu từ phía máy chủ không?
Bộ nhớ Firebase được kết nối với Google Cloud Platform như thế nào? Tại sao Firebase chỉ cho phép chúng tôi tải lên hình ảnh từ phía khách hàng?
thử thứ hai của tôi là sử dụng thư viện gcloud
, như đã đề cập trong các tài liệu:
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);
});
Đó là thực sự hữu ích, nhưng vẫn còn, vấn đề gốc rễ vẫn còn đó: Tôi không thể tải lên những thứ sử dụng 'gcloud' (ví dụ, tạo một thùng) vì, theo [câu trả lời này] (http://stackoverflow.com/a/23136508/1420197), tôi đã không kích hoạt thanh toán. Một lần nữa, tại sao truy cập Storage thông qua 'gcloud' sẽ yêu cầu thanh toán trong khi truy cập vào nó thông qua firebase phía khách hàng sẽ không? Cảm ơn! –
Tôi đã thêm một đoạn mã khác vào câu hỏi của mình. –
Có vẻ như bạn có thể cần bật tính năng thanh toán này là đúng sự thật.Tôi sẽ báo cáo cho nhóm trong nội bộ. Luôn luôn có cuộc tranh luận liệu chúng ta có nên tạo SDK máy chủ cụ thể Firebase cho Bộ nhớ và bây giờ sự đồng thuận là "không". Đối với vấn đề thanh toán: là giải pháp thay thế, bạn có thể bật thanh toán và đặt ngân sách với giới hạn Zero USD để tránh bị tính hóa đơn. Bản thân API nên được sử dụng miễn phí và nhóm mà Firebase Storage sử dụng có hạn ngạch miễn phí nên mọi thứ sẽ hoạt động. – Nivco