javascript - 使用 AngularFire2 将文件上传到 Firebase 存储

标签 javascript angular firebase firebase-storage angularfire2

我正在使用 Angular2 和 Firebase 开发一个项目,并且我愿意将图像上传到 Firebase 存储。

因此,我使用构造函数和函数创建了组件,然后创建了模板。我不确定我声明变量 firebaseApp, public firebaseApp: FirebaseApp; 的方式是否正确。

所以,在我的组件中,我有:

import { Component, OnInit, Inject, Input } from '@angular/core';
import {AngularFireDatabase, FirebaseListObservable} from 'angularfire2/database';
import { MdDialog, MdDialogRef, MD_DIALOG_DATA, MdButton } from '@angular/material';
import { Http, Headers, Response } from '@angular/http';
import {Observable} from 'rxjs/Rx';
import { FormBuilder, FormGroup } from '@angular/forms';
import { FirebaseApp } from 'angularfire2';
import 'firebase/storage';

@Component({
  selector: 'individual-chat',
  templateUrl: './chat.component.html',
  styleUrls: ['./chat.component.css']
})

export class IndividualChat implements OnInit {
    public firebaseApp: FirebaseApp;
constructor(
    firebaseApp: FirebaseApp,
    public afAuth: AngularFireAuth, 
    public af: AngularFireDatabase,
    public http: Http,
    public dialog: MdDialog
  ){ }

   EditChatData(){
      this.af.object('groupConversations/'+ this.my_id + '/' +this.conversation_id ).update({ groupName: this.group_edit_data.name ? this.group_edit_data.name : 'New Group' });        

  }
    onChange(files) {
    console.log(files, files[0]);
      let storageRef = this.firebaseApp.storage().ref().child('groupImages');

      storageRef.put(files[0]).then( snapshot => {
        console.log('successfully added');        
      }).catch(err => { console.error("Whoupsss!", err) })
    }
  ...
}

我在模板中创建的表单如下所示:

<form name="form" (ngSubmit)="EditChatData()" enctype="multipart/form-data">
  <input type="file" #file (change)="onChange(file.files)" />
  <input type="text" placeholder="Group name" name="name" [(ngModel)]="group_edit_data.name" #name="ngModel" class="form-control" value=" {{ group_name }}" />
  <button class="btn">DONE</button>
</form>

我不断收到此错误:

ERROR TypeError: Cannot read property 'storage' of undefined

并且,我的 onChange(files) 中的 console.log 返回此对象:

FileList {0: File, length: 1}
length: 1,
0: File {
lastModified: 1503324156295
lastModifiedDate: Mon Aug 21 2017 17:02:36 GMT+0300 (EEST),
name:"Screenshot from 2017-08-21 17-02-36.png",
size: 401442,
type: "image/png",
webkitRelativePath: ""
}

最佳答案

无法读取未定义的属性“存储”告诉您this.firebaseApp未定义

您可以在构造函数中初始化它,如下所示:

constructor(
  firebaseApp: FirebaseApp,
  public afAuth: AngularFireAuth, 
  public af: AngularFireDatabase,
  public http: Http,
  public dialog: MdDialog
) {
  this.firebaseApp = firebaseApp;
}

关于javascript - 使用 AngularFire2 将文件上传到 Firebase 存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45799684/

相关文章:

javascript - jQuery-File-Upload - 一种形式的多个输入文件

unit-testing - Angular2 组件测试。 Karma 没有加载 templateUrl

多次执行 Firebase 云函数

node.js - HTTP事件云函数: request body value is undefined

javascript - React 显示嵌套数组项

javascript - Javascript 中的字符串模式匹配

javascript - Extjs 与 HighCharts

javascript - jquery 克隆一个链接(每个 div 一次)

html - Angular:用户登录时隐藏元素

angular - 关于 rxjs observables 的基本问题——如何将数据提供给 observable 'by hand' ?