我已使用该功能将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
上传工作正常,我在数据库中看到照片名称和网址,我在存储中看到照片,但无法从那里获取照片。有什么建议吗?
答案 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后,您可以在数据库中创建文档来存储它。