Проблема с UploadTask от putString () - PullRequest
0 голосов
/ 04 декабря 2018

У меня проблемы с UploadTask из Firebase Storage.Я пытаюсь загрузить изображение, а затем сохранить его URL в Firestore Cloud.Для этого у меня есть следующий код:

newuploadImage() {
    this.image = 'movie-' + new Date().getTime() + '.jpg';
    let storageRef: any,
    parseUpload: any;
    storageRef = firebase.storage().ref('imgs/' + this.image);
    parseUpload = storageRef.putString(this.cameraImage, 'data_url')
    parseUpload.on('state_changed',
    function (snapshot) {
    }, function (error) {
    }, function () {
        // Upload completed successfully, now we can get the download URL
        parseUpload.snapshot.ref.getDownloadURL().then(function (downloadURL) {
            const idPubli = this.firestore.createId();
            const idReto = this.firestore.createId();
            let IDUser = firebase.auth().currentUser.uid;
            let img = downloadURL
            const idPuntPubli = this.firestore.createId();
            let participacionCreadora = true;
            let punt = 0;
            this.firestore.doc(`public/${idPubli}`).set({
                idPubli,
                idReto,
                IDUser,
                img,
                idPuntPubli,
                participacionCreadora,
                punt,
            })
        });
    })
}

Образ загружается нормально, однако, когда он пытается выполнить this.firestore , журнал консоли выдает мне эту ошибку:

ОШИБКА TypeError: Невозможно прочитать свойство 'firestore' из неопределенного

Я не знаю, как преодолеть эту ошибку.

EDIT

Это импорт и конструктор на случай, если что-то не так.

import {  AngularFirestore} from 'angularfire2/firestore';

constructor(public camera: Camera, public firestore: AngularFirestore) {
  }

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Поделитесь своим кодом, может быть, он будет вам полезен.

  this.imageFile.name.substr(this.imageFile.name.lastIndexOf('.'));
  const fileRef = this.storage.ref(this.filePath);
  this.task = this.storage.upload(this.filePath, this.imageFile);
  this.uploadPercent = this.task.percentageChanges();
  this.task
    .snapshotChanges()
    .pipe(
      finalize(() => {
        this.downloadURL = fileRef.getDownloadURL();
        this.downloadURL.subscribe(url => {
          this.imageUrl = url;
        });
      })
    )
    .subscribe();
  return this.uploadPercent;
}
0 голосов
/ 04 декабря 2018

Скорее всего, вы столкнулись с проблемой области действия, которую можно устранить, заменив эту функцию:

.then(function (downloadURL)

функцией стрелки (которая сохраняет лексическую область действия).

.then((downloadURL) =>
...