Как я могу передать файл с помощью resolLocalFilesystemUrl и прочитать его, чтобы загрузить картинку В IONIC 3 - PullRequest
0 голосов
/ 04 июля 2018

Я пытаюсь загрузить изображения на свой сервер в IONIC 3, но иногда это работает хорошо, а иногда нет. Я думаю, что для синхронизма.

Поток:

На моей странице есть кнопка, где можно сделать снимок и сохранить фотографию (эта функция хорошо работает).

  1. сфотографируй
takePhoto() {
    this.camera.getPicture({
      quality: 80,
      destinationType: this.camera.DestinationType.FILE_URI,
      targetWidth: 150,
      targetHeight: 150,
      correctOrientation: true
    }).then(imageUri => {
      this.myPhoto = imageUri;
      }).catch(error => console.warn(error))
  }

Тогда, когда у меня есть это изображение и доступна кнопка «Отправить фотографию», если я нажму на эту кнопку, следующий шаг будет следующим:

 private uploadPhoto(): void {
    if (this.myPhoto != undefined || !this.myPhoto || this.myPhoto != null) {
      let imageFileUri = this.myPhoto;
      this.error = null;
      this.loading = this.loadingCtrl.create({
        content: 'Cargando imagen...'
      });
      this.loading.present();

      this.file.resolveLocalFilesystemUrl(imageFileUri)
        .then(entry => (<FileEntry>entry).file(file => this.readFile(file)))
        .catch(err => {
          alert(JSON.stringify(err));
        });
    }
    else {
      this.presentAlertFailText("No hay ninguna imagen", "Selecciona una e inténtalo de nuevo.")
    }
  }

и эта функция вызывает следующую, где я вызываю мой сервис для загрузки на мой сервер.

private readFile(file: any) {
        const reader = new FileReader();
        reader.onloadend = () => {
            const formData = new FormData();
            const imgBlob = new Blob([reader.result], {type: file.type});
            formData.append('profile', imgBlob, file.name);          
            this._up.uploadUserPicture(formData).then(res => {
                localStorage.setItem('PHOTO', res['result']);
                this.loading.dismiss();              

            }, err => {
                this.loading.dismiss();
                this.presentToast('Imagen no subida');                
            }).catch(err => {
                this.loading.dismiss();
                this.presentToast('Imagen no subida');                
            })
        };
        reader.readAsArrayBuffer(file);
    }

Я думаю, что проблема заключается в обещаниях, по этой причине иногда они работают хорошо, а иногда нет.

Я думаю, мне нужен рефакторинг кода в строке: .then (entry => (entry) .file (file => this.readFile (file))) в функции uploadPhoto

Но я не знаю ... как я могу это сделать. У вас есть какие-либо предложения? изображение моей страницы с потоком

...