Non*_*714 38 javascript node.js firebase firebase-storage
按照这个例子,我不断收到错误:
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无效的论点()和"/"...但有相同的信息,但无济于事.
我正在使用:
如何成功创建存储参考?
Sel*_*ish 26
弃用,见下文:
根据这个答案,在Node.js中,google-cloud应该使用包存储,而不是firebase存储,似乎这个答案应该确认它.代码示例:
npm i --save google-cloud
Run Code Online (Sandbox Code Playgroud)
然后:
const gcloud = require('google-cloud')
const storage = gcloud.storage({
projectId: '<projectID>',
keyFilename: 'service-account-credentials.json',
});
const bucket = storage.bucket('<projectID>.appspot.com')
Run Code Online (Sandbox Code Playgroud)
截至2018年,这是正确的答案:
或仅使用包的存储部分:
npm install --save @google-cloud/storage
Run Code Online (Sandbox Code Playgroud)
然后:
var storage = require('@google-cloud/storage')
Run Code Online (Sandbox Code Playgroud)
另请查看文档了解更多信息.
Gin*_*pei 22
我遇到了同样的问题.就我而言,除了Firebase核心之外,我还需要包含存储模块.
import firebase from 'firebase';
import 'firebase/storage'; // <----
firebase.initializeApp({
...
});
const storageRef = firebase.storage().ref();
Run Code Online (Sandbox Code Playgroud)
(npm firebase v5.0.4)
Non*_*714 18
google-cloud.Firebase和Google Cloud的参考和指南并未反映今天的情况.firebase-adminSDK,所以我不必乱用用户身份验证.创建一个使用Firebase和Google Cloud的Node.js项目.为什么?Firebase具有一个有用的数据库,以及其他功能,而Google Cloud允许云文件存储和检索.
创建Firebase和Google Cloud(存储)项目.
使用npm,安装firebase-admin并google-cloud在Node.js项目中.
注意1:我使用了管理员SDK,因此在创建Firebase项目后,您需要转到:
Node.js> [将生成的代码复制/粘贴到项目中]> [单击"生成新私钥"]> [将生成的代码下载json到首选位置]> [替换
"path/to...AccountKey.json"为刚刚生成的密钥的路径]注意2:生成的密钥可以在firebase或google-cloud凭据中重复使用.
创建项目后,导入firebase-adminsdk:
代码应如下所示,但填写了您的信息:
var admin = require("firebase-admin");
admin.initializeApp({
credential: admin.credential.cert("/path/to/generated/json/here.json"),
databaseURL: "database-url-from-firebase"
});
Run Code Online (Sandbox Code Playgroud)
要查找databaseURL,请转到Firebase中的"存储",并记下以URL开头的URL,gs:然后将其复制/粘贴到databaseURL的值字段中.
接下来,获取可以使用的数据库的引用:
var db = admin.database();
var ref = db.ref("/");
console.log('DB ref: ' + ref); //just to debug, if undefined, there's a problem.
Run Code Online (Sandbox Code Playgroud)
要了解有关读取/写入数据库的更多信息,请按照Firebase自己的文档进行操作.
在Google Cloud上创建项目后,添加结算信息; 如果没有结算信息,则无法使用存储桶.
在你的index.js:
var gcloud = require('google-cloud');
var gcs = gcloud.storage({
projectId: 'paste-that-project-id-here',
keyFilename: 'paste-that-path-to-the-previously-downloaded-json-from-firebase-here'
});
Run Code Online (Sandbox Code Playgroud)
现在,您可以通过以下方式将文件发送到存储:
var bucket = gcs.bucket('bucket_name');
var remoteFile = bucket.file('somefile-inThisCaseASong.mp3');
var localFilename = '/Users/you/Music/somefile-inThisCaseASong.mp3';
bucket.upload(localFilename, function(err, file) {
if (!err) {
console.log('somefile-inThisCaseASong.mp3 is now in your bucket.');
} else {
console.log('Error uploading file: ' + err);
}
});
Run Code Online (Sandbox Code Playgroud)
如果该文件在Firebase存储和Google云端存储中可见,您就完成了!
2020 年的答案,就我而言,我在 .html 文件中包含了 firebase-storage.js
<script src="https://www.gstatic.com/firebasejs/6.5.0/firebase-storage.js"></script>
Run Code Online (Sandbox Code Playgroud)
因此,如果您使用所有 Firebase 服务,您将拥有
<script src="https://www.gstatic.com/firebasejs/6.5.0/firebase-app.js"></script>
<script src="https://www.gstatic.com/firebasejs/6.5.0/firebase-auth.js"></script>
<script src="https://www.gstatic.com/firebasejs/6.5.0/firebase-firestore.js"></script>
<script src="https://www.gstatic.com/firebasejs/6.5.0/firebase-messaging.js"></script>
<script src="https://www.gstatic.com/firebasejs/6.5.0/firebase-storage.js"></script>
<!-- your script calling Firebase Firestore under this line -->
<script>
....
</script>
Run Code Online (Sandbox Code Playgroud)
我遇到了同样的问题,我的代码如下:
import * as firebase from "firebase/app";
import 'firebase/storage';
firebase.initializeApp({
...
});
const storageRef = firebase.storage().ref();
Run Code Online (Sandbox Code Playgroud)
所以,我发现只有当你使用Typescript 时才会这样做。
如果您只使用ES6,那么您必须:
import firebase from 'firebase/app';
import 'firebase/storage';
firebase.initializeApp({
...
});
const storageRef = firebase.storage().ref();
Run Code Online (Sandbox Code Playgroud)
如果你使用ES5,那么你必须:
var firebase = require("firebase/app");
require("firebase/storage");
firebase.initializeApp({
...
});
const storageRef = firebase.storage().ref();
Run Code Online (Sandbox Code Playgroud)
此外,您也可以使用以下方式,但不推荐使用,因为您加载了所有服务(数据库、身份验证、存储等):
import firebase from "firebase";
firebase.initializeApp({
...
});
const storageRef = firebase.storage().ref();
Run Code Online (Sandbox Code Playgroud)
使用 Firebase 7.15.2 测试
小智 5
使用Storage with Firebase时,您无法在免费套餐上添加存储桶.但是,默认情况下,您会获得一个存储桶(只有一个).我(最终)成功的方法是:
在Firebase中添加存储到我的项目(不是Google Cloud)
添加管理员SDK并根据Google文档设置必要的服务帐户:https://firebase.google.com/docs/admin/setup? authuser = 1
@google-cloud/storage按照使用Admin SDK和存储的说明添加软件包:https://firebase.google.com/docs/storage/admin/start?authuser = 1
初始化应用程序:
admin.initializeApp({
credential: admin.credential.cert("/path/to/generated/json/here.json"),
storageBucket: "folder-URL-from-Storage-page-excluding-gs://"
});
Run Code Online (Sandbox Code Playgroud)使用(来自Admin SDK文档)访问存储桶对象:
const bucket = admin.storage().bucket();
使用存储库在存储桶上运行.例:
bucket.upload('/path/file.ext', function(err, file, apiResponse) {
//Do Stuff
});
Run Code Online (Sandbox Code Playgroud)注意:我花了几个小时确信它没有工作,因为我没有一个桶,但事实证明我的错误是gs://在初始化时包括在我的存储桶的路径中.
| 归档时间: |
|
| 查看次数: |
31116 次 |
| 最近记录: |