Как загрузить фотографию с камеры Android с помощью FormData на Ioni c / Angular - PullRequest
0 голосов
/ 27 февраля 2020

В настоящее время я занимаюсь разработкой приложения Android, в котором пользователь может сделать свое изображение и загрузить его в конечную точку API PATCH, которая будет прослушивать ключ «аватар».

Я использую Cordova Camera и плагин Advanced HTTP для его обработки.

Ниже приведена функция, которая срабатывает при съемке фотографии.

takePicture() {
    const options: CameraOptions = {
      quality: 50,
      destinationType: this.camera.DestinationType.FILE_URI,
      encodingType: this.camera.EncodingType.JPEG,
      mediaType: this.camera.MediaType.PICTURE,
      correctOrientation: true,  // Corrects Android orientation quirks
      allowEdit: false, // Post process aanpassingen
      sourceType: this.camera.PictureSourceType.CAMERA // Pak de selfie camera
    };
    this.camera.getPicture(options).then((imageData) => {
      const formData = new FormData();
      formData.append('avatar', imageData, 'pic.jpg');
      this.web.updateUserInfo(formData).subscribe(() => {});
    }, (err) => {
      console.error('Camera Error: ' + err);
    });
  }

Вот API обработки

updateUserInfo(newData: any) {
        return new Observable((obs) => {
                this.http2.patch('localhost/user', {newData}, {
                    'X-Subdomain': 'host',
                    'X-Token': this.apiKey,
                }).then(() => {console.log('Camera API success!'); obs.next(); }).catch(error => {
                    console.error(error);
                });
        });
    }

Не выдается никаких ошибок, поэтому мне трудно понять, в чем проблема. У меня мало опыта работы с Кордовой и Иони c, так что для меня это все ново.

1 Ответ

0 голосов
/ 27 февраля 2020

Проблема destinationType: this.camera.DestinationType.FILE_URI,

, которую вы отправляете, URL файла по http, а не base64 изображения

Измените тип пункта назначения: destinationType: this.camera.DestinationType.DATA_URL,

DATA_URL Возвращает строку в кодировке base64. DATA_URL может быть очень ресурсоемким и вызывать сбои приложения или ошибки нехватки памяти. Используйте FILE_URI или NATIVE_URI, если возможно

ОБНОВЛЕНИЕ

В этом видео вы можете проверить, как отправить base64 в api как Файл

https://www.youtube.com/watch?v=tph5Nk4Ab1g

...