按照这个例子,我不断收到错误:
TypeError: firebase.storage is not a function
Run Code Online (Sandbox Code Playgroud)
从我的代码中的这一行:
var storageRef = firebase.storage().ref();
Run Code Online (Sandbox Code Playgroud)
(当我只是尝试从存储指南初始化存储时,从firebase的npm站点链接,我得到同样的错误.)
在我的Node.js项目中,我包括以下库:
const firebase = require('firebase');
var admin = require('firebase-admin');
const fs = require('fs');
到目前为止,我已经成功地读取并写入了firebase数据库,创建了对数据库的引用var db = admin.database()
,然后var ref = db.ref("/")
......所以我知道我已经正确配置了Firebase和firebase-database.但是我卡上storage
,并试图既admin.storage().ref()
和firebase.storage().ref()
,并firebase.storage().ref("/")
用相同的错误消息.
我也尝试过:
var storage = firbase.storage();
var storageRef = storage.ref();
Run Code Online (Sandbox Code Playgroud)
和
const app = firebase.initializeApp(config);
var storage = app.storage();
Run Code Online (Sandbox Code Playgroud)
和ref()
's无效的论点()
和"/"
...但有相同的信息,但无济于事.
我正在使用:
我正在尝试使用Node.js了解如何在Firebase存储中上传文件.我的第一次尝试是使用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);
}, …
Run Code Online (Sandbox Code Playgroud) 目前,我正在使用@ google-cloud/storage NPM软件包将文件直接上传到Google云端存储分区.这需要一些技巧,因为我只有图像的base64编码字符串.我必须:
我想避免将文件存储在文件系统中,因为我使用的是Google App Engine,如果删除操作因任何原因无效,我不想重载文件系统/留下垃圾文件.这就是我的上传脚本现在的样子:
// Convert the base64 string back to an image to upload into the Google Cloud Storage bucket
var base64Img = require('base64-img');
var filePath = base64Img.imgSync(req.body.base64Image, 'user-uploads', 'image-name');
// Instantiate the GCP Storage instance
var gcs = require('@google-cloud/storage')(),
bucket = gcs.bucket('google-cloud-storage-bucket-name');
// Upload the image to the bucket
bucket.upload(__dirname.slice(0, -15) + filePath, {
destination: 'profile-images/576dba00c1346abe12fb502a-original.jpg',
public: true,
validation: 'md5'
}, function(error, file) {
if (error) {
sails.log.error(error);
}
return res.ok('Image …
Run Code Online (Sandbox Code Playgroud) javascript node.js google-cloud-storage google-cloud-platform
我想通过监听由functions.database.ref().onWrite()
(而不是functions.storage.object().onChange()
)触发的事件来使用firebase云功能执行文件操作.
我注意到大多数使用云函数的示例functions.storage.object().onChange()
触发了用于文件操作的云函数.有没有办法storageRef
从内部获取functions.database.ref()
并执行文件操作?
我使用 firebase-admin 和 firebase-functions 在 Firebase 存储中上传文件。
我在存储中有这个规则:
service firebase.storage {
match /b/{bucket}/o {
match /images {
allow read;
allow write: if false;
}
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用以下代码获取公共 URL:
const config = functions.config().firebase;
const firebase = admin.initializeApp(config);
const bucketRef = firebase.storage();
server.post('/upload', async (req, res) => {
// UPLOAD FILE
await stream.on('finish', async () => {
const fileUrl = bucketRef
.child(`images/${fileName}`)
.getDownloadUrl()
.getResult();
return res.status(200).send(fileUrl);
});
});
Run Code Online (Sandbox Code Playgroud)
但我有这个错误.child is not a function
。如何使用 firebase-admin 获取文件的公共 url?
google-cloud-storage firebase firebase-storage firebase-admin
我可以使用 firebase-admin 通过 nodejs 将文件上传到我的 firebase 存储桶,但是当我转到 firebase UI 时,我无法打开该文件。我注意到通过 firebase UI 上传的文件会自动生成一个访问令牌,但没有通过 nodejs 上传的文件。
我已经尝试了几种方法,例如使用下载令牌设置元数据并在上传文件后公开文件。没有一个奏效。
如何通过 API 调用生成访问令牌,而不必为每个上传的文件点击生成令牌?
这是我要实现的目标,实现Firebase的调整大小图像扩展名,上传图像,然后在调整大小完成后,将dowloadUrl的拇指添加到Cloud Firestore文档中。这个问题对我有帮助,但仍然无法识别出拇指并获得下载URL,这是到目前为止我们一直在尝试的方法。
注意:我将缩略图设置为root / thumbs
const functions = require('firebase-functions');
const { Storage } = require('@google-cloud/storage');
const storage = new Storage();
exports.thumbsUrl = functions.storage.object().onFinalize(async object => {
const fileBucket = object.bucket;
const filePath = object.name;
const contentType = object.contentType;
if (fileBucket && filePath && contentType) {
console.log('Complete data');
if (!contentType.startsWith('thumbs/')) {
console.log('This is not a thumbnails');
return true;
}
console.log('This is a thumbnails');
} else {
console.log('Incomplete data');
return null;
}
});
Run Code Online (Sandbox Code Playgroud) 我的 Firebase 存储getSignedUrl()
下载链接可以使用几天,然后停止工作。错误信息是
SignatureDoesNotMatch
The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.
Run Code Online (Sandbox Code Playgroud)
去年夏天,在 GitHub 上对此进行了长时间的讨论,但我没有看到解决方案。
我正在考虑getDownloadURL()
从前端使用而不是getSignedUrl()
从后端使用。是getDownloadURL()
不太安全的,然后getSignedUrl()
?
这是我的代码,主要是从文档中复制的:
SignatureDoesNotMatch
The request signature we calculated does not match the signature you provided. Check your Google secret key and signing method.
Run Code Online (Sandbox Code Playgroud) 如何通过云功能检索 Firebase 中存储图像的下载链接?
我尝试了各种变体,包括下一个:
exports.getImgs = functions.https.onRequest((req, res) => {
var storage = require('@google-cloud/storage')();
var storageRef = storage.ref;
console.log(storageRef);
storageRef.child('users/user1/avatar.jpg').getDownloadURL().then(function(url) {
});
});
Run Code Online (Sandbox Code Playgroud) 在云功能内部,如何获取存储文件的下载URL?
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const storage = admin.storage();
Run Code Online (Sandbox Code Playgroud)
我可以使用此存储对象执行操作,storage.bucket().file(path).getMetadata()
但是返回的元数据不包含firebase-signed-download-url。
文档说要创建参考并执行reference.getDownloadURL()
。唯一的事情是,这似乎不适用于从firebase-admin软件包返回的存储对象。