Angular 2 firebase无法从数据库中获取图像

时间:2018-03-20 12:30:20

标签: angular typescript firebase firebase-realtime-database firebase-authentication

我已使用该功能将img URL上传到我的数据库:

get getListUploads(): Observable<AngularFireAction<DatabaseSnapshot>[]> {
    return this.uploadRef.snapshotChanges().map(changes => {
      return changes.map(c => ({ key: c.payload.key, ...c.payload.val() }));
    });
  }

之后我想通过该功能获得它,首先是路径引用,因为我只希望登录用户会看到他们自己上传的内容

ERROR TypeError: Cannot read property 'snapshotChanges' of undefined
    at UploadService.get [as getListUploads] (upload.service.ts:30)

最后,我想获得上传的图片列表

getRadius()

我在控制台中遇到错误:

B

上传工作正常,我在数据库中看到照片名称和网址,我在存储中看到照片,但无法从那里获取照片。有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您对该文件的引用不正确。您正在使用条件来保存它:

auth && auth.email && auth.uid

看看你在JS中给我们的回报:

console.log({auth: true} && 'foo.bar@gmail.com' && 207894193784);

这意味着当您保存帖子时,其名称中仅使用ID。

现在让我们在没有满足条件的标准的情况下进行测试:

console.log({auth: true} && '' && 207894193784);

如您所见,如果未提供邮件,则不会获得任何名称。

您必须重写对该文件的引用,这应该可以自行解决您的问题。

建议的

编辑,服务的一个例子

import { Observable } from 'rxjs/Observable';
import { Injectable } from '@angular/core';
import { AngularFireStorage } from 'angularfire2/storage';

@Injectable()
export class StorageService {

  constructor(
    private afsStorage: AngularFireStorage
  ) { }

  createFile(file: File, folder = 'unclassified'): Observable<string> {
    const path = `${Date.now()}-${Math.random().toString(36).slice(-8)}.${file.name.split('.').splice(-1)}`;
    return this.afsStorage.upload(`${folder}/${path.toLowerCase()}`, file).downloadURL();
  }

  removeFile(url: string): Observable<any> {
    const ref = this.afsStorage.storage.refFromURL(url);
    return Observable.fromPromise(ref.delete());
  }
}

第一种方法允许您创建文件,并返回一个网址。获得URL后,您可以在数据库中创建文档来存储它。