Я пытаюсь загрузить изображения на свой сервер в IONIC 3, но иногда это работает хорошо, а иногда нет. Я думаю, что для синхронизма.
Поток:
На моей странице есть кнопка, где можно сделать снимок и сохранить фотографию (эта функция хорошо работает).
- сфотографируй
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
Но я не знаю ... как я могу это сделать.
У вас есть какие-либо предложения? изображение моей страницы с потоком