EmberFire 和 Firebase 存储参考
EmberFire & Firebase Storage Reference
我对 Ember 和 EmberFire 比较陌生。我正在开发 Client/Logo 管理应用程序。我目前已按预期获得 Firebase 身份验证和 Firebase 数据。当我将徽标上传到 Firebase 存储时,出现此错误:
Uncaught Error: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp(). firebase.js:30
这是正在调用的操作:
控制器
firebase: Ember.inject.service( 'firebase' ),
actions: {
createClient(){
let name = this.get( 'clientName' );
let image = document.getElementById( 'client-image' );
let storeName = name.replace( / /g, '' );
let storageRef = firebase.storage().ref();
let file = image.files[0];
let metadata = {
'contentType' : file.type
};
let uploadTask = storageRef.child( `uploads/${storeName}/${file.name}` ).put( file, metadata );
uploadTask.on( 'state_changed', null, function( error ){
console.error( 'Upload Failed:', error );
}, function(){
console.log( 'Uploaded', uploadTask.snapshot.totalBytes, 'bytes.' );
console.log( uploadTask.snapshot.metadata );
let uploadUrl = uploadTask.snapshot.metadata.downloadURLs[0];
console.log( 'File available at ', url );
let client = this.store.createRecord( 'client', {
name: name,
image: uploadUrl,
isActive: false,
timestamp: new Date().getTime()
} );
client.save();
} );
// Tell the route to hide the client form.
this.send( 'hideAddClientForm' );
}
}
模板
<div id="new-overlay" class="overlay" {{action "hideAddClientForm"}}></div>
<div id="newClient">
{{input type="text" id="client-name" placeholder="Client Name" value=clientName}}<br />
{{input type="file" id="client-image" value=clientImage}}
<div class="submitBtn" {{action "createClient"}}>Add Client</div>
</div>
因此,简而言之,我如何访问 EmberFire 提供的 Firebase 引用,以便我可以调用 here in the Quickstart 中显示的 "storage()" 方法。如果无法访问该引用,我是否必须创建另一个 "non-EmberFire" 对 Firebase 的引用才能使用存储?我只是想上传一个 .jpg。
确保您使用的是 EmberFire 2.0。您可以通过 firebaseApp
服务访问 Firebase 存储 API:
firebaseApp: Ember.inject.service(),
actions: {
doSomething() {
const storageRef = this.get('firebaseApp').storage();
}
}
firebaseApp
服务是一个已经初始化的应用程序,不要与 firebase
服务混淆,后者只是数据库参考(为向后兼容而保留)。
我对 Ember 和 EmberFire 比较陌生。我正在开发 Client/Logo 管理应用程序。我目前已按预期获得 Firebase 身份验证和 Firebase 数据。当我将徽标上传到 Firebase 存储时,出现此错误:
Uncaught Error: No Firebase App '[DEFAULT]' has been created - call Firebase App.initializeApp(). firebase.js:30
这是正在调用的操作:
控制器
firebase: Ember.inject.service( 'firebase' ),
actions: {
createClient(){
let name = this.get( 'clientName' );
let image = document.getElementById( 'client-image' );
let storeName = name.replace( / /g, '' );
let storageRef = firebase.storage().ref();
let file = image.files[0];
let metadata = {
'contentType' : file.type
};
let uploadTask = storageRef.child( `uploads/${storeName}/${file.name}` ).put( file, metadata );
uploadTask.on( 'state_changed', null, function( error ){
console.error( 'Upload Failed:', error );
}, function(){
console.log( 'Uploaded', uploadTask.snapshot.totalBytes, 'bytes.' );
console.log( uploadTask.snapshot.metadata );
let uploadUrl = uploadTask.snapshot.metadata.downloadURLs[0];
console.log( 'File available at ', url );
let client = this.store.createRecord( 'client', {
name: name,
image: uploadUrl,
isActive: false,
timestamp: new Date().getTime()
} );
client.save();
} );
// Tell the route to hide the client form.
this.send( 'hideAddClientForm' );
}
}
模板
<div id="new-overlay" class="overlay" {{action "hideAddClientForm"}}></div>
<div id="newClient">
{{input type="text" id="client-name" placeholder="Client Name" value=clientName}}<br />
{{input type="file" id="client-image" value=clientImage}}
<div class="submitBtn" {{action "createClient"}}>Add Client</div>
</div>
因此,简而言之,我如何访问 EmberFire 提供的 Firebase 引用,以便我可以调用 here in the Quickstart 中显示的 "storage()" 方法。如果无法访问该引用,我是否必须创建另一个 "non-EmberFire" 对 Firebase 的引用才能使用存储?我只是想上传一个 .jpg。
确保您使用的是 EmberFire 2.0。您可以通过 firebaseApp
服务访问 Firebase 存储 API:
firebaseApp: Ember.inject.service(),
actions: {
doSomething() {
const storageRef = this.get('firebaseApp').storage();
}
}
firebaseApp
服务是一个已经初始化的应用程序,不要与 firebase
服务混淆,后者只是数据库参考(为向后兼容而保留)。