Возврат идентификатора данных при загрузке изображения в угловых форматах и ​​в базе данных - PullRequest
0 голосов
/ 29 мая 2018

Я загружаю изображение, используя angularTS и firebase.Мой план состоит в том, чтобы загрузить изображение и сохранить следующие данные.после этого я ожидаю возврата ID из firebase database обратного вызова.проблема в том, что я не могу получить данные, потому что они возвращаются мне вот так.

__zone_symbol__state : true
__zone_symbol__value : "viHnY2OpUnJkO2VbfgwJ"
__proto__ : Object

это мой код для загрузки изображения.

 this.venueSvc.setVenuePhoto(this.venue, this.photo[0])
      .subscribe(snapshot => {
       console.log(snapshot); 
       console.log(snapshot.__zone_symbol__value);
       console.log(snapshot.value);

 });

и это мой сервис длязагрузите изображение в базу данных Firebase.

setVenuePhoto(venue: any, photo: File): Observable<any> {
    console.log(venue);

    let subjectTemp: any;
    let uploadPhoto: any;

    const uploadTask = firebase.storage()
      .ref().child(this.PATH_VENUES + '/' + photo.name)
      .put(photo);

    uploadTask.on('state_changed', snapshot => {
      uploadPhoto = snapshot;
      let progress = Math.floor((uploadPhoto.bytesTransferred / uploadPhoto.totalBytes) * 100);
    }, error => {
      console.log(error);
    }, () => {

      venue.dateCreated = firebase.firestore.FieldValue.serverTimestamp();
      venue.dateUpdated = firebase.firestore.FieldValue.serverTimestamp();
      venue.venuePhoto = uploadPhoto.task.snapshot.downloadURL;

      subjectTemp = this.venuesCollection.add(<Venue>venue.getData()).then(value => {
        return value.id
      });

      this.viewUploadSubject.next(subjectTemp);
    });

    return this.viewUploadSubject;
  }

Я должен быть в состоянии получить ID, потому что он мне понадобится, чтобы обновить место.Любое предложение будет оценено.

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Вы можете сохранить downloadUrl в базе данных вместо идентификатора

uploadPhoto.task.snapshot.downloadURL

Я не знаю структуру остальной части вашего приложения, но вы также можете сохранить downloadURLобновите БД в вашем полном методе при загрузке uploadTask.on('state_changed', progress, error, complete); или сохраните его в состоянии downloadUrl и после загрузки сохраните URL-адрес в базе данных

0 голосов
/ 29 мая 2018

Вы загружаете свое изображение в хранилище, а не в Firebase.Это две разные службы, и Storage не предоставляет и идентификатор файла, который вы обновляете.

Если вы хотите сослаться на файл из Storage, вы можете просто сохранить его путь.

Иливы можете сохранить ссылку на этот файл в Firebase, чтобы вам было легче получать ссылки из файлов.

...